从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