104

SQLServerデータベースから読み取って抽出ファイルを生成するSQLクエリに取り組んでいます。単純なフィールドである特定のフィールドから先行ゼロを削除するための要件の1つVARCHAR(10)。したがって、たとえば、フィールドに「00001A」が含まれている場合、SELECTステートメントはデータを「1A」として返す必要があります。

この方法で先行ゼロを簡単に削除する方法はSQLにありますか?関数があることは知っていRTRIMますが、これはスペースを削除するだけのようです。

4

15 に答える 15

162
select substring(ColumnName, patindex('%[^0]%',ColumnName), 10)
于 2008-09-18T13:07:56.460 に答える
28
select replace(ltrim(replace(ColumnName,'0',' ')),' ','0')
于 2012-08-15T23:51:09.137 に答える
5
select substring(substring('B10000N0Z', patindex('%[0]%','B10000N0Z'), 20), 
    patindex('%[^0]%',substring('B10000N0Z', patindex('%[0]%','B10000N0Z'), 
    20)), 20)

N0Zつまり、先頭のゼロとその前にあるものはすべて削除されます。

于 2012-08-17T19:58:23.197 に答える
5

私は同じ必要があり、これを使用しました:

select 
    case 
        when left(column,1) = '0' 
        then right(column, (len(column)-1)) 
        else column 
      end
于 2014-11-13T13:23:55.737 に答える
4

これを使用できます:

SELECT REPLACE(LTRIM(REPLACE('000010A', '0', ' ')),' ', '0')
于 2016-04-18T08:49:14.853 に答える
3

クエリがゼロの文字列やその他の値の代わりに 0 を返すようにしたい場合は、これを次のような case ステートメントに変えることができます。

select CASE
      WHEN ColumnName = substring(ColumnName, patindex('%[^0]%',ColumnName), 10) 
       THEN '0'
      ELSE substring(ColumnName, patindex('%[^0]%',ColumnName), 10) 
      END
于 2010-12-21T23:25:29.877 に答える
0

これを試すことができます - 必要に応じて先頭のゼロのみを削除するように特別な注意が必要です:

DECLARE @LeadingZeros    VARCHAR(10) ='-000987000'

SET @LeadingZeros =
      CASE WHEN PATINDEX('%-0', @LeadingZeros) = 1   THEN 
           @LeadingZeros
      ELSE 
           CAST(CAST(@LeadingZeros AS INT) AS VARCHAR(10)) 
      END   

SELECT @LeadingZeros

または、単に電話することもできます

CAST(CAST(@LeadingZeros AS INT) AS VARCHAR(10)) 
于 2018-02-01T06:10:08.927 に答える
-3
select CASE
         WHEN TRY_CONVERT(bigint,Mtrl_Nbr) = 0
           THEN ''
           ELSE substring(Mtrl_Nbr, patindex('%[^0]%',Mtrl_Nbr), 18)
       END
于 2016-11-29T14:14:05.487 に答える
-3

上記のアイデアからお借りしました。これは高速でもエレガントでもありません。しかし、それは正確です。

場合

WHEN left(column, 3) = '000' THEN right(column, (len(column)-3))

WHEN left(column, 2) = '00' THEN right(a.column, (len(column)-2))

WHEN left(column, 1) = '0' THEN right(a.column, (len(column)-1))

ELSE 

終わり

于 2016-02-12T22:17:36.770 に答える
-5
select ltrim('000045', '0') from dual;

LTRIM
-----
45

これで十分です。

于 2014-08-20T08:14:49.717 に答える