2017-02-22 14 views
1

文字列の先頭のゼロを削除する関数を記述する必要があります。最初のゼロの位置は変わることがあります。文字列内のcharを先頭にゼロを切り捨てます。

例1:

0000900 needs to become 900 

例2:

A0000900 needs to become A900 

例3:

ABCD00090ABC0D needs to become ABCD90ABC0D 

例4:

ABC0D00090ABC0D needs to become ABCD00090ABC0D 

開始位置に関係なく最初の先頭のゼロを削除する必要があります。

私はこの試みた:

DECLARE @input VARCHAR(255)= '0002981K0K' 
SELECT SUBSTRING(@input, PATINDEX('%[^0]%', @input), LEN(@input)) 

をしかし、これは良いである、2981K0Kにつながります。しかし、前に数値以外の値を追加すると(質問はAとする)、クエリに最初の先行ゼロは表示されず、結果はA0002981K0Kになります

+0

「AB0C00D000900」はどうなりますか? – Hogan

+0

ABC00D000900になります(最初のゼロを削除してください)。 – ImperialBert

答えて

0

これを試すことができますか? 2番目の結果として、文字列を接頭辞ゼロの2つの部分に分割し、最初の部分と2番目の部分の部分文字列接頭辞ゼロを結合します。 AB000C00D000900のために、それはあなたが使用するクロスは適用したくない場合は、あなたがにクエリを変更することができます

;WITH tb(S) AS (
    SELECT 'ABCD00090ABC0D' UNION 
    SELECT '0000900' UNION 
    SELECT 'K0000900800' UNION 
    SELECT 'A0000900' UNION 
    SELECT 'AB00CD00900' UNION 
    SELECT 'AB000C00D000900' UNION 
    SELECT '0002981K0K' 
    ) 
    SELECT s,STUFF(s,PATINDEX('%0%',s),PATINDEX('%[1-9]%',s)-PATINDEX('%0%',s),'') 
      ,c.l+SUBSTRING(c.r,PATINDEX('%[^0]%',c.r),len(c.r)) 
    FROM tb 
    CROSS APPLY(VALUES(PATINDEX('%0%',s),LEFT(s,PATINDEX('%0%',s)-1),SUBSTRING(s,PATINDEX('%0%',s),LEN(s)))) c(b,l,r) 
 
s          
--------------- -------------------- ------------------------------ 
0000900   900     900 
0002981K0K  2981K0K    2981K0K 
A0000900  A900     A900 
AB00CD00900  AB900    ABCD00900 
AB000C00D000900 AB900    ABC00D000900 
ABCD00090ABC0D ABCD90ABC0D   ABCD90ABC0D 
K0000900800  K900800    K900800 

ABC00D000900

にABとC00D000900を組み合わせ、その後ABと000C00D000900 に分割されます:

SELECT s,LEFT(s,PATINDEX('%0%',s)-1)+SUBSTRING(SUBSTRING(s,PATINDEX('%0%',s),LEN(s)),PATINDEX('%[^0]%', SUBSTRING(s,PATINDEX('%0%',s),LEN(s))),len(s)) 
    FROM tb 
+0

'0000900800' - >' 900800'だと思います(9と0のすべての例と同じです)。数字3のように – Hogan

+0

実際の質問は、「AB00CD00900」 - >「ABCD900」または「ABCD00900」の文字が混在していますか?あなたのコードは私が間違っていると思う 'AB900'を与えます。 – Hogan

+0

返信用のThx。私はそれがうまくいくと思うが、ホーガンはあなたが正しい。これを解決する方法はありますか? – ImperialBert

関連する問題