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.
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)
restituisce N0Z
, cioè, eliminerà gli zeri iniziali e tutto ciò che viene prima di loro.
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
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
Per rimuovere il primo 0, puoi moltiplicare la colonna del numero con 1Eg: Seleziona (ColumnName * 1)
Puoi usare questo:
SELECT REPLACE(LTRIM(REPLACE('000010A', '0', ' ')),' ', '0')
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