2016-11-11 166 views
2

我有一堆的英国邮政代码如下:SQL Server:如何获取单词中的第一个或第二个字母?

Sector 
S1 1 
RH16 9 
NP23 9 
N81 1 

这是在行业层面。我可以通过在空间之前获得部门级代码的第一部分来获得地区级别。即:“S1”而不是“S1 1”。即:“S”,而不是“S1 1”或“RH”,而不是“RH16 9”

PARSENAME(REPLACE(c.Sector, ' ','.'),2) 

和邮政区可以通过只使用字母被发现。

我可以在第一个字母或第二个字母的地方写一个查询,但是如何获得它,以便在我打一个数字之前得到第一个或第二个字母?

最终的结果应该是这个样子:

Sector    PostArea 
S1 1      S 
RH16 9     RH 
NP23 9     NP 
N81 1     N 

在此先感谢您的帮助。

回答

2
Declare @YourTable table (Sector varchar(50)) 
Insert Into @YourTable values 
('S1 1'), 
('RH16 9'), 
('NP23 9'), 
('N81 1') 

Select * 
     ,PostArea=Substring(Sector,1,patindex('%[0-9]%',Sector)-1) 
from @YourTable 

返回

Sector PostArea 
S1 1 S 
RH16 9 RH 
NP23 9 NP 
N81 1 N 

编辑:

要捕获的非数字串

PostArea=case when patindex('%[0-9]%',Sector)=0 then '' else Substring(Sector,1,patindex('%[0-9]%',Sector)-1) end 
0

select SUBSTRING(Sector,0,PATINDEX('%[0-9]%',Sector))

相关问题