2017-05-08 17 views
3

SQLテーブルから先行ゼロを削除したいと思います。私は1列として3列に加わります。私は結果がなりたいものを 例SQLから先行ゼロを削除する方法

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 varcharintので、先行ゼロが削除されintおよびcast連結のために。

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 this :-) – 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, '') 
関連する問題