我正在研究从SQLServer数据库中读取以产生提取文件的SQL查询。从特定字段中删除前导零的要求之一,这是一个简单的VARCHAR(10)
字段。因此,例如,如果该字段包含'00001A',则SELECT语句需要将数据返回为'1A'。从SQL语句的字段中删除前导零
有没有一种方法在SQL中轻松地删除这种方式的前导零?我知道有一个RTRIM
函数,但这似乎只是删除空格。
我正在研究从SQLServer数据库中读取以产生提取文件的SQL查询。从特定字段中删除前导零的要求之一,这是一个简单的VARCHAR(10)
字段。因此,例如,如果该字段包含'00001A',则SELECT语句需要将数据返回为'1A'。从SQL语句的字段中删除前导零
有没有一种方法在SQL中轻松地删除这种方式的前导零?我知道有一个RTRIM
函数,但这似乎只是删除空格。
select substring(ColumnName, patindex('%[^0]%',ColumnName), 10)
这将有问题时,字符串完全由“0”组成,因为它永远不会匹配一个non- “0”字符。 – 2009-03-19 14:09:29
是的。在这种情况下,它将返回所有未修改的零串。如果这是一个问题,patindex的返回值将不得不针对零进行测试。 – 2009-04-20 09:26:54
不错。谢谢 – VISQL 2012-06-02 00:35:49
如果您想查询返回一个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(ColumnName,'0',' ')),' ','0')
select substring(substring('B10000N0Z', patindex('%[0]%','B10000N0Z'), 20),
patindex('%[^0]%',substring('B10000N0Z', patindex('%[0]%','B10000N0Z'),
20)), 20)
返回N0Z
,也就是说,将摆脱前导零和前面的任何东西。
若要从月份以后的声明中删除前导0肯定会起作用。
SELECT replace(left(Convert(nvarchar,GETDATE(),101),2),'0','')+RIGHT(Convert(nvarchar,GETDATE(),101),8)
只需将GETDATE()
替换为表格的日期字段即可。
select ltrim('000045', '0') from dual;
LTRIM
-----
45
这应该做。
我有同样的需求,并用这个:
select
case
when left(column,1) = '0'
then right(column, (len(column)-1))
else column
end
我从借来的想法上面。这既不快也不优雅。但它是准确的。
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 REPLACE(LTRIM(REPLACE('000010A', '0', ' ')),' ', '0')
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
你可以试试这个
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))
作为给予好评大卫沃克的http://stackoverflow.com/a/11129399: - 如果需要,它需要特别注意只删除前导零/ 1635441响应,请参考阿尔沃的回答发布: http://stackoverflow.com/a/662437/1635441 – ramizmoh 2013-01-31 12:43:27