基于条件提取T-SQL中的子字符串
我在sql列中有地址,该列还包含邮政编码,即以下格式基于条件提取T-SQL中的子字符串,sql,sql-server,Sql,Sql Server,我在sql列中有地址,该列还包含邮政编码,即以下格式 10 westminister way Road, London (NW10 5NQ) 但并不是所有的记录都有邮政编码,在这种情况下会是这样的 10 westminister way Road, London 我需要提取字符串,这是工作正常,除了以下字符抛出错误,如果邮政编码不存在,我认为我需要使用包含,但不知道如何修改现有的代码这样做 select ,REVERSE(SUBSTRING(REVERSE([address]),2, C
10 westminister way Road, London (NW10 5NQ)
但并不是所有的记录都有邮政编码,在这种情况下会是这样的
10 westminister way Road, London
我需要提取字符串,这是工作正常,除了以下字符抛出错误,如果邮政编码不存在,我认为我需要使用包含,但不知道如何修改现有的代码这样做
select
,REVERSE(SUBSTRING(REVERSE([address]),2, CHARINDEX('(', REVERSE([address]))-2)) PostCode
,CHARINDEX('(', REVERSE([address]))-2 indexDetail
我的问题是如何使用contain或if条件
if(CHARINDEX('(', REVERSE([address])) = true then proceed with substring
else ignore record
这个怎么样
select (case when address like '% (%)'
then left(right(address, 9), 8)
end) as postcode
使用
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
如果需要空字符串而不是NULL
:
SELECT
[address],
PostalCode = COALESCE(SUBSTRING([address], NULLIF(charindex('(',[address]),0), 256),'')
FROM @table;
比我的短得多,扭转了规则的例外。SMRT
SELECT
[address],
PostalCode = COALESCE(SUBSTRING([address], NULLIF(charindex('(',[address]),0), 256),'')
FROM @table;