SQL:拆分邮政编码值以返回'外部'代码的一部分

时间:2017-01-27 15:00:40

标签: tsql sql-server-2012

我已经获得了英国邮政编码的结果集。有些是用空格格式化的,有些则不是S14HG和S1 4HG

我希望我的选择查询只返回结果中邮政编码值的外部部分,即' S1'

我可以使用以下公式在Excel中执行此操作:

=IF(ISERROR(LEFT(A1,LEN(A1)-3)),””,LEFT(A1,LEN(A1)-3))

是否可以通过SELECT查询在SQL中执行相同的功能?

2 个答案:

答案 0 :(得分:2)

英国邮政编码可以有many formats for their outward code.

之一

但是,正如您可以从该链接中的可能格式中看到的那样,邮政编码的其余部分采用了一致的格式。如果您确信您的邮政编码是正确的,您可以删除任何空格和最后3个字符:

declare @Postcodes table (Postcode nvarchar(10));
insert into @Postcodes values
 ('S1 4HG')
,('S14HG')
,('S10 4HG')
,('S104HG');

select Postcode
        ,replace(left(Postcode,len(Postcode)-3),' ','') as OutwardCode
from @Postcodes

输出:

Postcode    OutwardCode
S1 4HG      S1
S14HG       S1
S10 4HG     S10
S104HG      S10

答案 1 :(得分:-1)

您可以使用LEFT()而不考虑空格,因为您只需要前两个空格。

SELECT LEFT('S1 4HG',2)

或者只是摆脱空间......

declare @t varchar(64) = 'S   1     4     H     G'

SELECT LEFT(REPLACE(@t,' ',''),2)