我想只显示英国邮政编码的第一个字母。例如,如果它是WV14 7AR
,那么我只想显示WV
我试过了:
DECLARE @v VARCHAR(30)
SET @v='WV14 7AR'
SELECT LEFT(@v,LEN(@v)-6)
返回:WV
但是,如果邮政编码为:WV4
,则会显示:W
,这是错误的。
请记住,您可以获得一封可能是1个字母的英国邮政编码! 伯明翰的邮政编码是:B1 2AR因此LEFT建议将失败。
答案 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