web-dev-qa-db-ja.com

SQLステートメントのフィールドから先行ゼロを削除する

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

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

93
Tim C
select substring(ColumnName, patindex('%[^0]%',ColumnName), 10)
142
Ian Horwill
select replace(ltrim(replace(ColumnName,'0',' ')),' ','0')
23
MTZ
select substring(substring('B10000N0Z', patindex('%[0]%','B10000N0Z'), 20), 
    patindex('%[^0]%',substring('B10000N0Z', patindex('%[0]%','B10000N0Z'), 
    20)), 20)

N0Zを返します。つまり、先行ゼロとそれらの前にあるすべてのものを取り除きます。

4
Nat

同じニーズがあり、これを使用しました:

select 
    case 
        when left(column,1) = '0' 
        then right(column, (len(column)-1)) 
        else column 
      end
4
ekc

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

select CASE
      WHEN ColumnName = substring(ColumnName, patindex('%[^0]%',ColumnName), 10) 
       THEN '0'
      ELSE substring(ColumnName, patindex('%[^0]%',ColumnName), 10) 
      END
3
Kathryn Wilson

これを使用できます:

SELECT REPLACE(LTRIM(REPLACE('000010A', '0', ' ')),' ', '0')
1
Stelian

先頭の0を削除するには、数値列に1を掛けることができます。例:Select(ColumnName * 1)

0
Krin

これを試すことができます-必要に応じてonly先行ゼロを削除するために特別な注意が必要です:

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)) 
0

文字列から先行ゼロを削除するSQLスカラー値関数は次のとおりです。

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      Vikas Patel
-- Create date: 01/31/2019
-- Description: Remove leading zeros from string
-- =============================================
CREATE FUNCTION dbo.funRemoveLeadingZeros 
(
    -- Add the parameters for the function here
    @Input varchar(max)
)
RETURNS varchar(max)
AS
BEGIN
    -- Declare the return variable here
    DECLARE @Result varchar(max)

    -- Add the T-SQL statements to compute the return value here
    SET @Result = @Input

    WHILE LEFT(@Result, 1) = '0'
    BEGIN
        SET @Result = SUBSTRING(@Result, 2, LEN(@Result) - 1)
    END

    -- Return the result of the function
    RETURN @Result

END
GO
0
Vikas