如何修剪英国邮政编码

时间:2016-02-02 10:20:53

标签: sql-server tsql

我想只显示英国邮政编码的第一个字母。例如,如果它是WV14 7AR,那么我只想显示WV

我试过了:

DECLARE @v VARCHAR(30)
SET @v='WV14 7AR'
SELECT LEFT(@v,LEN(@v)-6)

返回:WV

但是,如果邮政编码为:WV4,则会显示:W,这是错误的。

请记住,您可以获得一封可能是1个字母的英国邮政编码! 伯明翰的邮政编码是:B1 2AR因此LEFT建议将失败。

2 个答案:

答案 0 :(得分:1)

这将显示英国邮政编码的第一个字母

With Src (Postcode) As (
    Select 'B1 1AB' Union All
    Select 'W1A 1AB' Union All
    Select 'WV14 1AB' Union All
    Select 'GIR 1AB'
)
Select
    Postcode,
    RTRIM(LEFT(Postcode, PATINDEX('%[0-9]%', Postcode) - 1)) As FirstLetters
From Src
Postcode    FirstLetters
--------    ------------
B1 1AB      B
W1A 1AB     W
WV14 1AB    WV
GIR 1AB     GIR

更新:非英国邮政编码(如全字母)可以过滤掉

Where Postcode Like '%[0-9]%'

甚至更严格

Where Postcode Like '[a-z]%[0-9]%[a-z]'

或用

处理
CASE WHEN Postcode Like '%[0-9]%'
    THEN RTRIM(LEFT(Postcode, PATINDEX('%[0-9]%', Postcode) - 1))
    ELSE Postcode
END As FirstLetters

答案 1 :(得分:0)

Assumtion:在第一个整数之前提取部分

  DECLARE @v VARCHAR(30)
    SET @v='WV14 7AR'
    SELECT case when (PATINDEX('%[0-9]%', @v)) >2 then left(@v,2) else left(@v,1) end