it-swarm.it

Rimozione degli zeri iniziali da un campo in un'istruzione SQL

Sto lavorando su una query SQL che legge da un database SQLServer per produrre un file di estrazione. Uno dei requisiti per rimuovere gli zeri iniziali da un campo particolare, che è un semplice campo VARCHAR(10). Ad esempio, se il campo contiene "00001A", l'istruzione SELECT deve restituire i dati come "1A".

C'è un modo in SQL per rimuovere facilmente gli zeri principali in questo modo? So che esiste una funzione RTRIM, ma sembra solo rimuovere spazi. 

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)

restituisce N0Z, cioè, eliminerà gli zeri iniziali e tutto ciò che viene prima di loro.

4
Nat

Ho avuto lo stesso bisogno e ho usato questo: 

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

Se si desidera che la query restituisca uno 0 anziché una stringa di zeri o qualsiasi altro valore, è possibile trasformarlo in un'istruzione case come questa:

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

Per rimuovere il primo 0, puoi moltiplicare la colonna del numero con 1Eg: Seleziona (ColumnName * 1)

0
Krin

Puoi usare questo:

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

Ecco la funzione del valore scalare SQL che rimuove gli zeri iniziali dalla stringa:

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