복붙노트

[SQL] SQL 문에 필드에서 앞의 0을 제거

SQL

SQL 문에 필드에서 앞의 0을 제거

나는 추출 파일을 생성하기 위해 SQLServer에 데이터베이스에서 읽는 SQL 쿼리를하고 있어요. 요구 사항 중 하나는 단순 VARCHAR (10) 필드는 특정 분야에서 선행 0을 제거한다. 필드 '00001A'를 포함한다면, 예를 들어, SELECT 문의 요구는 '1A'로 데이터를 반환합니다.

쉽게 이런 식으로 앞에 0을 제거하는 SQL의 방법이 있나요? 나는 RTRIM 함수가 알고 있지만이 제거 공간 만 보인다.

해결법

  1. ==============================

    1.

    select substring(ColumnName, patindex('%[^0]%',ColumnName), 10)
    
  2. ==============================

    2.

    select replace(ltrim(replace(ColumnName,'0',' ')),' ','0')
    
  3. ==============================

    3.

    select substring(substring('B10000N0Z', patindex('%[0]%','B10000N0Z'), 20), 
        patindex('%[^0]%',substring('B10000N0Z', patindex('%[0]%','B10000N0Z'), 
        20)), 20)
    

    N0Z는, 즉, 앞의 0 그들 앞에 오는 아무것도 제거 얻을 것이다 반환합니다.

  4. ==============================

    4.나는 같은 필요했고이를 사용 :

    나는 같은 필요했고이를 사용 :

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

    5.당신은 쿼리가 제로 또는이 같은 경우 문이 점을 설정할 수 있습니다 그 문제에 대한 다른 값의 문자열 대신 0을 반환하려면 :

    당신은 쿼리가 제로 또는이 같은 경우 문이 점을 설정할 수 있습니다 그 문제에 대한 다른 값의 문자열 대신 0을 반환하려면 :

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

    6.당신은이를 사용할 수 있습니다 :

    당신은이를 사용할 수 있습니다 :

    SELECT REPLACE(LTRIM(REPLACE('000010A', '0', ' ')),' ', '0')
    
  7. ==============================

    7.이 시도 할 수 있습니다 - 필요한 경우에만 제거 앞의 0에 특별한주의를 취합니다

    이 시도 할 수 있습니다 - 필요한 경우에만 제거 앞의 0에 특별한주의를 취합니다

    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
    

    또는 당신은 단순히 호출 할 수 있습니다

    CAST(CAST(@LeadingZeros AS INT) AS VARCHAR(10)) 
    
  8. ==============================

    8.여기에 제거합니다 문자열에서 0을 선도하는 SQL 스칼라 값 기능은 다음과 같습니다

    여기에 제거합니다 문자열에서 0을 선도하는 SQL 스칼라 값 기능은 다음과 같습니다

    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
    
  9. ==============================

    9.경우 당신은 알 수없는 크기의 문자열에서 앞에 0을 제거 할.

    경우 당신은 알 수없는 크기의 문자열에서 앞에 0을 제거 할.

    당신은 물건 명령을 사용하여 고려할 수 있습니다.

    여기 그것이 작동하는 방법에 대한 예입니다.

    SELECT ISNULL(STUFF(ColumnName
                       ,1
                       ,patindex('%[^0]%',ColumnName)-1
                       ,'')
                 ,REPLACE(ColumnName,'0','')
                 )
    

    그것을 다룰 것 피들러 다양한 시나리오를 참조하십시오

    https://dbfiddle.uk/?rdbms=sqlserver_2012&fiddle=14c2dca84aa28f2a7a1fac59c9412d48

  10. ==============================

    10.확실히 작동합니다 문 다음 달 선도 0을 제거합니다.

    확실히 작동합니다 문 다음 달 선도 0을 제거합니다.

    SELECT replace(left(Convert(nvarchar,GETDATE(),101),2),'0','')+RIGHT(Convert(nvarchar,GETDATE(),101),8) 
    

    그냥 테이블의 날짜 필드 GETDATE ()를 교체합니다.

  11. ==============================

    11.당신이 시도 할 수 있습니다  테이블에서 (럼 이름을 '0', '') 바꾸기를 선택

    당신이 시도 할 수 있습니다  테이블에서 (럼 이름을 '0', '') 바꾸기를 선택

  12. ==============================

    12.0을 선두 제거하려면, 당신은 1 번호 열을 곱할 수 예 : 선택 (의 ColumnName * 1)

    0을 선두 제거하려면, 당신은 1 번호 열을 곱할 수 예 : 선택 (의 ColumnName * 1)

  13. ==============================

    13.

    select replace(replace(rtrim(replace(replace(replace(replace(ltrim(replace(replace([COLUMN],' ','[Ltrim]'),[Ltrim],' ')),' ',[Ltrim]),'[Ltrim]',' '),' ','[Rtrim]'),[Rtrim],' ')),' ',[Rtrim]),'[Rtrim]',' ') As Result
    

    이 TSQL 이전에 2017, 다른 recomendateions로서의 기본적으로 동일에있는 TRIM 명령의 기능을 에뮬레이트하는 SQL 스크립트이지만, 다른 사람들은 여전히 ​​'[RTRIM]'또는 '[발생할 수있는 하나의 흔한 문자로 대체 LTRIM은] '여전히 텍스트에서 발생할 수 있지만, 고유의 텍스트 모자를 교체, 예를 들어 GUID는 그 문제를 해결할 것입니다.

    나는 속도에 관한 그것을 테스트하지 않았습니다

  14. ==============================

    14.

    select ltrim('000045', '0') from dual;
    
    LTRIM
    -----
    45
    

    이 수행해야합니다.

  15. ==============================

    15.나는 위의 아이디어에서 빌렸다. 이렇게도 빨리도 우아한. 하지만 정확합니다.

    나는 위의 아이디어에서 빌렸다. 이렇게도 빨리도 우아한. 하지만 정확합니다.

    케이스

    WHEN left(column, 3) = '000' THEN right(column, (len(column)-3))
    
    WHEN left(column, 2) = '00' THEN right(a.column, (len(column)-2))
    
    WHEN left(column, 1) = '0' THEN right(a.column, (len(column)-1))
    
    ELSE 
    

    종료

  16. ==============================

    16.

    select CASE
             WHEN TRY_CONVERT(bigint,Mtrl_Nbr) = 0
               THEN ''
               ELSE substring(Mtrl_Nbr, patindex('%[^0]%',Mtrl_Nbr), 18)
           END
    
  17. from https://stackoverflow.com/questions/92093/removing-leading-zeroes-from-a-field-in-a-sql-statement by cc-by-sa and MIT license