我在sql列中有地址,其中也包含邮政编码,例如以下格式
10 westminister way Road, London (NW10 5NQ)
但并非所有记录都可能具有邮政编码,以防类似
10 westminister way Road, London
我需要从正常工作的字符串中提取帖子,但如果邮政编码不存在,则会出现字符抛出错误,除非我相信我需要使用contain,但不确定如何修改现有代码来实现
select
,REVERSE(SUBSTRING(REVERSE([address]),2, CHARINDEX('(', REVERSE([address]))-2)) PostCode
,CHARINDEX('(', REVERSE([address]))-2 indexDetail
我的问题是如何使用contains或if条件
if(CHARINDEX('(', REVERSE([address])) = true then proceed with substring
else ignore record
答案 0 :(得分:2)
使用IIF
。不管邮政编码有多长时间,这都会抓住括号中的所有内容。我不确定它们在英国是否有所不同。
declare @table table ([address] varchar(256))
insert into @table
values
('10 westminister way Road, London (NW10 5NQ)'),
('10 westminister way Road, London')
select
[address],
PostCode = iif(charindex('(',[address]) > 1, substring([address],charindex('(',[address]),charindex(')',[address])),''),
PostalNoParan = iif(charindex('(',[address]) > 1, replace(replace(substring([address],charindex('(',[address]),charindex(')',[address])),'(',''),')',''),'')
from @table
答案 1 :(得分:2)
SELECT
[address],
PostalCode = SUBSTRING([address], NULLIF(charindex('(',[address]),0), 256)
FROM @table;
如果您需要一个空字符串而不是NULL
:
SELECT
[address],
PostalCode = COALESCE(SUBSTRING([address], NULLIF(charindex('(',[address]),0), 256),'')
FROM @table;
答案 2 :(得分:1)
怎么样?
select (case when address like '% (%)'
then left(right(address, 9), 8)
end) as postcode