2016-11-11 3 views
2

У меня есть куча британских почтовых индексов следующим образом:SQL Server: как получить первую или вторую букву в слове?

Sector 
S1 1 
RH16 9 
NP23 9 
N81 1 

Это находится на уровне сектора. Я могу получить районный уровень, просто взяв первую часть кода уровня сектора перед пространством. т.е.: «S1» вместо «S1 1».

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

И Почтовая площадь можно найти, используя только буквы: то есть: «S» вместо «S1 1» или «RH» вместо «RH16 9».

Я могу написать запрос, где он берет первую букву или вторую букву, но как мне ее получить, чтобы я мог получить первые 1 или 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 

Edit:

Для ловушки нецифры Струны

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