根据条件在T-SQL中提取子字符串

时间:2018-10-25 15:42:01

标签: sql sql-server

我在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

3 个答案:

答案 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