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))
다음은 문자열에서 선행 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
다음 달에서 선행 0을 제거하는 것은 확실히 작동합니다.
SELECT replace(left(Convert(nvarchar,GETDATE(),101),2),'0','')+RIGHT(Convert(nvarchar,GETDATE(),101),8)
그냥 교체 GETDATE()
테이블의 날짜 필드.
당신은 이것을 시도 할 수 있습니다 SELECT REPLACE(columnname,'0','') FROM table
선행 0을 제거하려면 숫자 열에 1을 곱할 수 있습니다. 예 : (ColumnName * 1)을 선택합니다.
select replace(replace(rtrim(replace(replace(replace(replace(ltrim(replace(replace([COLUMN],' ','[Ltrim]'),[Ltrim],' ')),' ',[Ltrim]),'[Ltrim]',' '),' ','[Rtrim]'),[Rtrim],' ')),' ',[Rtrim]),'[Rtrim]',' ') As Result
This is a Sql script that emulates the functionality of the TRIM command in tsql prior to 2017, its basically the same as the other recomendateions,but the others replace with a single uncommon character which still can occur, '[Rtrim]' or '[Ltrim]' could still occur in text, but replacing hat with a unique text, for example a Guid would solve that problem.
i havent tested it regarding speed
select ltrim('000045', '0') from dual;
LTRIM
-----
45
This should do.
I borrowed from ideas above. This is neither fast nor elegant. but it is accurate.
CASE
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
END
select CASE
WHEN TRY_CONVERT(bigint,Mtrl_Nbr) = 0
THEN ''
ELSE substring(Mtrl_Nbr, patindex('%[^0]%',Mtrl_Nbr), 18)
END
참고URL : https://stackoverflow.com/questions/92093/removing-leading-zeroes-from-a-field-in-a-sql-statement
'programing' 카테고리의 다른 글
div의 맨 위로 스크롤 (0) | 2020.09.02 |
---|---|
부트 스트랩에서 테이블 행 정렬 (0) | 2020.09.01 |
MySQL에서 작은 따옴표를 이스케이프하는 방법 (0) | 2020.09.01 |
메모리에서 지뢰 찾기의 광산 레이아웃을 나타내는 데이터 구조를 어떻게 찾을 수 있습니까? (0) | 2020.09.01 |
WPF ToolBar : 그립 및 오버플로를 제거하는 방법 (0) | 2020.09.01 |