Je travaille sur une requête SQL qui lit une base de données SQLServer pour produire un fichier extrait. L'une des conditions requises pour supprimer les zéros non significatifs d'un champ particulier, qui est un champ VARCHAR(10)
simple. Ainsi, par exemple, si le champ contient '00001A', l'instruction SELECT doit renvoyer les données sous la forme '1A'.
Existe-t-il un moyen dans SQL de supprimer facilement les zéros non significatifs de cette manière? Je sais qu'il existe une fonction RTRIM
, mais cela ne semble que pour supprimer des espaces.
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)
return N0Z
, c’est-à-dire qu’il va se débarrasser des zéros non significatifs et de tout ce qui les précède.
J'ai eu le même besoin et utilisé ceci:
select
case
when left(column,1) = '0'
then right(column, (len(column)-1))
else column
end
Si vous voulez que la requête retourne un 0 au lieu d'une chaîne de zéros ou toute autre valeur, vous pouvez transformer ceci en une instruction case comme
select CASE
WHEN ColumnName = substring(ColumnName, patindex('%[^0]%',ColumnName), 10)
THEN '0'
ELSE substring(ColumnName, patindex('%[^0]%',ColumnName), 10)
END
Pour supprimer le 0 initial, vous pouvez multiplier la colonne numérique par 1Eg: Sélectionnez (NomColonne * 1)
Vous pouvez essayer ceci - cela prend un soin particulier pour seulement supprimer les zéros de gauche si nécessaire:
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
Ou vous pouvez simplement appeler
CAST(CAST(@LeadingZeros AS INT) AS VARCHAR(10))
Vous pouvez utiliser ceci:
SELECT REPLACE(LTRIM(REPLACE('000010A', '0', ' ')),' ', '0')
Voici la fonction de valeur scalaire SQL qui supprime les zéros non significatifs de la chaîne:
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