it-swarm.com.de

Führende Nullen aus einem Feld in einer SQL-Anweisung entfernen

Ich arbeite an einer SQL-Abfrage, die aus einer SQLServer-Datenbank liest, um eine Extraktdatei zu erstellen. Eine der Voraussetzungen, um die führenden Nullen aus einem bestimmten Feld zu entfernen, ist ein einfaches VARCHAR(10)-Feld. Wenn das Feld beispielsweise '00001A' enthält, muss die SELECT-Anweisung die Daten als '1A' zurückgeben.

Gibt es eine Möglichkeit in SQL, die führenden Nullen auf diese Weise zu entfernen? Ich weiß, dass es eine RTRIM-Funktion gibt, aber dies scheint nur Leerzeichen zu entfernen. 

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)

returns N0Z, das heißt, führende Nullen und alles, was vor ihnen liegt, werden gelöscht.

4
Nat

Ich hatte das gleiche Bedürfnis und benutzte dieses: 

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

Wenn Sie möchten, dass die Abfrage eine 0 anstelle einer Zeichenfolge aus Nullen oder einen anderen Wert für diese Angelegenheit zurückgibt, können Sie dies in eine case-Anweisung wie folgt umwandeln:

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

Um die führende 0 zu entfernen, können Sie die Zahlenspalte mit 1 multiplizierenEg: Wählen Sie (Spaltenname * 1)

0
Krin

Sie können dies versuchen - es ist besonders darauf zu achten, dass only führende Nullen entfernt, falls erforderlich:

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

Oder rufen Sie einfach an

CAST(CAST(@LeadingZeros AS INT) AS VARCHAR(10)) 
0

Sie können dies verwenden:

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

Hier ist die SQL-Skalarwertfunktion, die führende Nullen aus Zeichenfolge entfernt:

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