it-swarm-tr.com

Bir SQL deyiminde bir alandaki baştaki sıfırları kaldırma

Bir ayıklama dosyası üretmek için bir SQLServer veritabanından okuyan bir SQL sorgusu üzerinde çalışıyorum. Önde gelen sıfırları, basit bir VARCHAR(10) alanı olan belirli bir alandan kaldırma gereksinimlerinden biri. Dolayısıyla, eğer alan '00001A' içeriyorsa, SELECT ifadesinin verileri '1A' olarak döndürmesi gerekir.

Önde gelen sıfırları bu şekilde kolayca kaldırmanın SQL'de bir yolu var mı? Bir RTRIM işlevi olduğunu biliyorum, ancak bu yalnızca boşlukları kaldırıyor gibi görünüyor. 

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)

N0Z işlevini döndürür, yani baştaki sıfırlardan ve bunlardan önce gelenlerden kurtulur.

4
Nat

Aynı ihtiyacı duydum ve bunu kullandım: 

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

Sorgunun sıfır dizesi yerine bir 0 döndürmesini veya bu konuda başka bir değer vermesini istiyorsanız, bunu şöyle bir case deyimine dönüştürebilirsiniz:

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

Baştaki 0'ı kaldırmak için sayı sütununu 1Eg: Select (SütunAdı * 1) ile çarpabilirsiniz.

0
Krin

Bunu deneyebilirsiniz - gerektiğinde sadece / başta sıfırları kaldırmak için özel özen gösterir:

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

Ya da sadece arayabilirsin

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

Bunu kullanabilirsiniz:

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

Önde gelen sıfırları dizeden kaldıran SQL skalar değer işlevi:

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