2010-11-11 70 views
4

有5列地址數據。我需要將這些字段連接成一個地址,如果它們存在,則這些字段之間有空格。如果該列有空值,我應該跳過它並且不輸入任何空格。T SQL條件字符串連接

select 
     case 
      when street_number != '' THEN (cast(street_number as int)) 
     end as street_number, 
     case 
      when street_ext != '' then 
        case 
         when street_ext = 50 then '1/2' 
        end 
     end as street_ext, 
     case 
      when street_direct ! = '' then street_direct 
     end as street_direct, 
     case 
      when site_street ! = '' then site_street 
     end as site_street, 
     case 
      when site_address ! = '' then site_address 
     end as site_address 
    from parcel 

我希望做的是有一個變量並將其分配給第一列street_number的值,然後當我移動到下一列,street_ext,如果它不爲空我d想檢查變量是否爲空,如果不是,則追加空格和值......等等。

我很生疏,可以用正確的方向推動。

謝謝大家。

+0

感謝大家的快速作出迴應,你們巖。 – jim 2010-11-11 18:41:09

回答

23

用「+」來連接字符串中TSQL:

SELECT CASE 
     WHEN LEN(p.street_number) > 0 THEN p.street_number + ' ' 
     ELSE '' 
     END + 
     CASE 
     WHEN p.street_ext = 50 THEN '1/2' 
     WHEN LEN(p.street_ext) > 0 THEN '' 
     ELSE p.street_ext 
     END + ' ' + 
     CASE 
     WHEN LEN(p.street_direct) > 0 THEN p.street_direct + ' ' 
     ELSE '' 
     END + 
     CASE 
     WHEN LEN(p.site_street) > 0 THEN p.site_street + ' ' 
     ELSE '' 
     END + 
     CASE 
     WHEN LEN(p.site_address) > 0 THEN p.site_address + ' ' 
     ELSE '' 
     END AS full_address 
FROM PARCEL p 

LEN function返回零如果字符串值爲NULL,或一個零長度的字符串。

+0

謝謝...這隻有一些修改完美工作。 – jim 2010-11-11 18:42:56

3

爲了簡單起見,我假定您的數據類型都是varchar或類似的。如果你是清除任何雙空格OK,怎麼樣:

rtrim(ltrim(replace(isnull(street_number) + ' ' 
    + isnull(street_ext) + ' ' 
    + isnull(street_direct) + ' ' 
    + isnull(site_street) + ' ' 
    + isnull(site_address), ' ', ' '))) 
5

嵌套isnulls可以做你所需要的。例如:

SELECT 
    ISNULL(streetnumber + ' ', '') 
     + ISNULL(streetext + ' ', '') 
     etc 

依靠NULL +''= NULL的事實。

4

線沿線的東西:

select coalesce(street_number+' ','')+ 
     coalesce(case when street_ext=50 then '1/2' else null end+' ','')+ 
     coalesce(street_direct+' ','')+ 
     coalesce(site_street+' ','')+ 
     coalesce(site_address,'') 
from parcel 
+0

這不起作用。 COALESCE(street_number +'','')將始終返回street_number +''選項,因爲由於空格連接到結尾,它將永遠不會爲空。 – AlphaKilo 2014-04-25 14:02:32

0

首先我想聲明的分隔符爲變量,因爲客戶是臭名昭著的改變這些。

我會做如下:

DECLARE @AddressSeperator NVARCHAR(5) = ' ' 

...,然後列declation,我會使用以下命令:

, CONCAT 
(
    (CASE WHEN LEN(p.street_number) > 0 THEN p.street_number + @AddressSeperator ELSE '' END) 
    , (CASE WHEN p.street_ext = 50 THEN '1/2' + @AddressSeperator WHEN LEN(p.street_ext) > 0 THEN p.street_ext + @AddressSeperator ELSE '' END) 
    , (CASE WHEN LEN(p.street_direct) > 0 THEN p.street_direct + @AddressSeperator ELSE '' END) 
    , (CASE WHEN LEN(p.site_street) > 0 THEN p.site_street + @AddressSeperator ELSE '' END) 
    , ISNULL(p.site_address, '') 

) AS [full_address]