从SQL语句的字段中删除前导零
我正在从SQLServer数据库中读取一个SQL查询来生成一个提取文件。 从特定字段(简单的VARCHAR(10)字段)中删除前导零的要求之一。 所以,例如,如果该字段包含“00001A”,则SELECT语句需要将数据返回为“1A”。
在SQL中有一种方法可以轻松地删除这种方式的前导零? 我知道有一个RTRIMfunction,但这似乎只是删除空格。
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
,也就是说,将摆脱前导零和任何前面的东西。
我有同样的需要,并使用这个:
select case when left(column,1) = '0' then right(column, (len(column)-1)) else column end
如果你想查询返回一个0而不是一个零string或任何其他值的事情,你可以把它变成这样的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肯定会起作用。
SELECT replace(left(Convert(nvarchar,GETDATE(),101),2),'0','')+RIGHT(Convert(nvarchar,GETDATE(),101),8)
只需将GETDATE()
replace为表格的date字段即可。
select ltrim('000045', '0') from dual; LTRIM ----- 45
这应该做的。
我从上面的想法借来的。 这既不快也不优雅。 但它是准确的。
案件
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 CASE WHEN TRY_CONVERT(bigint,Mtrl_Nbr) = 0 THEN '' ELSE substring(Mtrl_Nbr, patindex('%[^0]%',Mtrl_Nbr), 18) END