[sql] SQL 문의 필드에서 선행 0 제거

추출 파일을 생성하기 위해 SQLServer 데이터베이스에서 읽는 SQL 쿼리를 작업 중입니다. 특정 필드 (단순 VARCHAR(10)필드) 에서 선행 0을 제거하기위한 요구 사항 중 하나입니다 . 예를 들어 필드에 ‘00001A’가 포함 된 경우 SELECT 문은 데이터를 ‘1A’로 반환해야합니다.

SQL에서 이런 식으로 선행 0을 쉽게 제거하는 방법이 있습니까? RTRIM기능 이 있다는 것을 알고 있지만 이것은 공백을 제거하는 것 같습니다.



답변

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)

반환 N0Z, 즉, 앞에 0이 그들 앞에 오는 것을 없애 것이다.


답변

나는 동일한 필요가 있었고 이것을 사용했습니다.

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


답변

쿼리가 0 문자열 또는 해당 문제에 대한 다른 값 대신 0을 반환하도록하려면이를 다음과 같은 case 문으로 바꿀 수 있습니다.

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


답변

이것을 사용할 수 있습니다 :

SELECT REPLACE(LTRIM(REPLACE('000010A', '0', ' ')),' ', '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))