[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))