私は、SQLServerデータベースから読み取り、抽出ファイルを生成するSQLクエリに取り組んでいます。特定のフィールドから先行ゼロを削除するための要件の1つ。単純なVARCHAR(10)
フィールドです。したがって、たとえば、フィールドに「00001A」が含まれる場合、SELECTステートメントはデータを「1A」として返す必要があります。
この方法で先行ゼロを簡単に削除する方法はSQLにありますか? RTRIM
関数があることは知っていますが、これはスペースを削除するだけのようです。
select substring(ColumnName, patindex('%[^0]%',ColumnName), 10)
select replace(ltrim(replace(ColumnName,'0',' ')),' ','0')
select substring(substring('B10000N0Z', patindex('%[0]%','B10000N0Z'), 20),
patindex('%[^0]%',substring('B10000N0Z', patindex('%[0]%','B10000N0Z'),
20)), 20)
N0Z
を返します。つまり、先行ゼロとそれらの前にあるすべてのものを取り除きます。
同じニーズがあり、これを使用しました:
select
case
when left(column,1) = '0'
then right(column, (len(column)-1))
else column
end
クエリがゼロの文字列やその他の値の代わりに0を返すようにする場合は、これを次のようなcaseステートメントに変換できます。
select CASE
WHEN ColumnName = substring(ColumnName, patindex('%[^0]%',ColumnName), 10)
THEN '0'
ELSE substring(ColumnName, patindex('%[^0]%',ColumnName), 10)
END
これを使用できます:
SELECT REPLACE(LTRIM(REPLACE('000010A', '0', ' ')),' ', '0')
先頭の0を削除するには、数値列に1を掛けることができます。例:Select(ColumnName * 1)
これを試すことができます-必要に応じて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))
文字列から先行ゼロを削除する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