2017-05-08 79 views
3

我想從SQL表中刪除前導零。我加入3列作爲一列。 例如如何從SQL中刪除前導零(s)

col1   col2  col3 
00000  S   Gaskin Road 
      N   Broad Street 
00001     John Rolfe Road 

我想要得到的結果是:

1 0 S Gaskin Road or just S Gaskin Road 
2 N Broad Street 
3 1 John Rolfe Road 

這裏是我加入3列

,COALESCE(CASE WHEN col1 = '' THEN '' ELSE col1 + ' ' END, '') + 
    COALESCE(CASE WHEN col2 = '' THEN '' ELSE col2 + ' ' END, '') + 
    COALESCE(CASE WHEN col3 = '' THEN '' ELSE col3 + ' ' END, '') as allCol 
+0

什麼col1'的數據類型? – DigiFriend

+0

你能把它轉換成int嗎?數字沒有前導零。 –

+0

col1(nvarchar(255),null) – john

回答

1

cast COL1至int因此前導零被刪除,castintvarchar進行連結。

COALESCE(CASE WHEN col1 = '' THEN '' ELSE cast(cast(col1 as int) as varchar(255))+ ' ' END, '') + 
COALESCE(CASE WHEN col2 = '' THEN '' ELSE col2 + ' ' END, '') + 
COALESCE(CASE WHEN col3 = '' THEN '' ELSE col3 + ' ' END, '') 
+0

感謝vkp這工作:-) – john

+0

@john。 。 。這工作*假設* col1始終是一個數字。根據我的房屋號碼經驗,這不是一個安全的假設。 –

1

一種方法是使用patindex()腳本。我如何寫這首先想到的是:

((case when col1 is null or col1 = '' or col1 = '000000' then '' 
     else substring(col1, patindex('%[^0]%', col1), 6) + ' ' 
    end) + 
    (case when col2 is null or col2 = '' then '' 
     else col2 + ' ' 
    end) + 
    (case when col3 is null or col3 = '' then '' 
     else col3 
    end) 
    ) as allcol 

如果你已經需要使用case,我沒有看到一個優勢,在coalesce()混合。

1

您可以定義自己的函數刪除所有的前導零:

CREATE FUNCTION RemoveLeadingZeros(@value varchar(255)) RETURNS varchar(255) 
AS 
BEGIN 
    while substring(@value, 1, 1) = '0' and datalength(@value) > 1 
    begin 
    set @value = substring(@value, 2, 255) 
    end 

    return @value; 
END 
GO 

所以,你的3場的串聯,現在將是:

,COALESCE(CASE WHEN col1 = '' THEN '' ELSE dbo.RemoveLeadingZeros(col1) + ' ' END, '') + 
COALESCE(CASE WHEN col2 = '' THEN '' ELSE col2 + ' ' END, '') + 
COALESCE(CASE WHEN col3 = '' THEN '' ELSE col3 + ' ' END, '') as allCol 
0
COALESCE(CASE WHEN col1 = '' THEN '' ELSE SUBSTRING(col1, PATINDEX('%[^0]%', col1+'.'), LEN(col1))+ ' ' END, '') + 
COALESCE(CASE WHEN col2 = '' THEN '' ELSE col2 + ' ' END, '') + 
COALESCE(CASE WHEN col3 = '' THEN '' ELSE col3 + ' ' END, '')