SQL 문의 필드에서 선행 0 제거
SQL Server 데이터베이스에서 읽어내 추출 파일을 생성하는 SQL 쿼리를 작업하고 있습니다.특정 필드에서 선행 0을 제거하기 위한 요건 중 하나로, 이는 단순합니다.VARCHAR(10)
필드. 예를 들어 필드에 '00001A'가 포함되어 있는 경우 SELECT 문은 데이터를 '1A'로 반환해야 합니다.
SQL에서 이러한 방법으로 선행 0을 쉽게 제거할 수 있는 방법이 있습니까?제가 아는 건RTRIM
기능을 합니다만, 이것은 공간을 제거하는 것 뿐인 것 같습니다.
select substring(ColumnName, patindex('%[^0]%',ColumnName), 10)
select replace(ltrim(replace(ColumnName,'0',' ')),' ','0')
다음을 사용할 수 있습니다.
SELECT REPLACE(LTRIM(REPLACE('000010A', '0', ' ')),' ', '0')
저도 같은 욕구가 있어서 이걸 사용했어요.
select
case
when left(column,1) = '0'
then right(column, (len(column)-1))
else column
end
select substring(substring('B10000N0Z', patindex('%[0]%','B10000N0Z'), 20),
patindex('%[^0]%',substring('B10000N0Z', patindex('%[0]%','B10000N0Z'),
20)), 20)
돌아온다N0Z
즉, 선행하는 0과 그 앞에 오는 모든 것을 제거합니다.
쿼리에서 0 문자열이나 기타 값이 아닌0 을 반환하는 경우는, 이것을 다음과 같은 케이스 스테이트먼트로 변환할 수 있습니다.
select CASE
WHEN ColumnName = substring(ColumnName, patindex('%[^0]%',ColumnName), 10)
THEN '0'
ELSE substring(ColumnName, patindex('%[^0]%',ColumnName), 10)
END
크기를 알 수 없는 문자열에서 선행 0을 제거하려는 경우.
STUP 명령어의 사용을 검토해 주십시오.
여기 그것이 어떻게 작동하는지에 대한 예가 있습니다.
SELECT ISNULL(STUFF(ColumnName
,1
,patindex('%[^0]%',ColumnName)-1
,'')
,REPLACE(ColumnName,'0','')
)
피들러에서 다루는 다양한 시나리오를 참조하십시오.
https://dbfiddle.uk/?rdbms=sqlserver_2012&sql=14c2dca84a28f2a7a1fac59c9412d48
다음과 같이 시도해 볼 수 있습니다. 필요한 경우 선행 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()
표의 날짜 필드와 함께 입력합니다.
선행 0을 제거하려면 숫자 열에 1을 곱하면 됩니다. 예: 선택(ColumnName * 1)
select CASE
WHEN TRY_CONVERT(bigint,Mtrl_Nbr) = 0
THEN ''
ELSE substring(Mtrl_Nbr, patindex('%[^0]%',Mtrl_Nbr), 18)
END
이거 드셔보세요 SELECT REPLACE(columnname,'0','') FROM table
나는 위의 아이디어에서 빌렸다.이것은 빠르지도 우아하지도 않지만 정확하다.
사례.
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
끝.
select ltrim('000045', '0') from dual;
LTRIM
-----
45
이거면 되겠군.
언급URL : https://stackoverflow.com/questions/92093/removing-leading-zeroes-from-a-field-in-a-sql-statement
'programing' 카테고리의 다른 글
UITableView의 셀 앞에 빈 공간 제거 (0) | 2023.04.11 |
---|---|
'UserControl' 유형이 직접 콘텐츠를 지원하지 않습니다. (0) | 2023.04.11 |
WPF에서 창을 최소화하시겠습니까? (0) | 2023.04.11 |
Relay Command가 필요한 이유 (0) | 2023.04.11 |
WPF List View 항목을 가로 스크롤 막대처럼 가로로 반복하려면 어떻게 해야 합니까? (0) | 2023.04.11 |