web-dev-qa-db-fra.com

Suppression des zéros non significatifs d'un champ dans une instruction SQL

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. 

87
Tim C
select substring(ColumnName, patindex('%[^0]%',ColumnName), 10)
135
Ian Horwill
select replace(ltrim(replace(ColumnName,'0',' ')),' ','0')
21
MTZ
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.

4
Nat

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
3
ekc

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
2
Kathryn Wilson

Pour supprimer le 0 initial, vous pouvez multiplier la colonne numérique par 1Eg: Sélectionnez (NomColonne * 1)

0
Krin

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

Vous pouvez utiliser ceci:

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

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