it-swarm-eu.dev

Odstranění úvodních nul z pole v příkazu SQL

Pracuji na dotazu SQL, který čte z databáze SQLServeru k vytvoření souboru extrahování. Jedním z požadavků na odstranění prvních nuly z určitého pole, což je jednoduché pole VARCHAR(10). Například, pokud pole obsahuje '00001A', příkaz SELECT musí vrátit data jako '1A'.

Existuje způsob, jak v SQL snadno odstranit vedoucí nuly tímto způsobem? Vím, že existuje funkce RTRIM, ale zdá se, že je to pouze odstranění mezer. 

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)

vrátí N0Z, to znamená, že se zbaví předních nuly a čehokoliv, co jim předchází.

4
Nat

Měla jsem stejnou potřebu a použila jsem to: 

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

Pokud chcete, aby dotaz vrátil hodnotu 0 namísto řetězce nula nebo jakékoli jiné hodnoty, můžete tento příkaz změnit na tento případ:

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

Chcete-li odebrat úvodní 0, můžete násobit číselný sloupec 1 Např .: Vybrat (Název sloupce * 1)

0
Krin

Můžete použít toto:

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

Zde je funkce skalární hodnoty SQL, která odstraňuje úvodní nuly z řetězce:

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