SQL Server:仅修剪前导零的函数

时间:2017-04-03 20:32:53

标签: sql sql-server function stored-procedures

我必须制作一个修正前导零的功能。然而,它比仅仅摆脱第一个零点更复杂一些。

几个例子和结果:

  • QZ0106应成为:QZ106
  • 0108应该成为:108
  • 00000B0108应成为:B0108
  • 011B%000407A0001!应该成为:11B%000407A0001!

我自己构建了一个查询,并提出了以下内容

 RETURN LEFT(@input, PATINDEX('%0%', @input)-1) + 
 SUBSTRING(SUBSTRING(@input, PATINDEX('%0%',@input), LEN(@input)), PATINDEX('%[^0]%', SUBSTRING(@input,PATINDEX('%0%',@input),LEN(@input))),len(@input))

现在,这对于获得上述结果非常有用。

但是:

ZBET108应保持 ZBET108。 - 上述查询返回 ZBET18

我无法让它发挥作用。查询应该找到第一个数字字符串并修剪它的前导零。它现在似乎要做的是搜索第一个零并删除它。

有人可以帮助我吗?

非常感谢你们。

1 个答案:

答案 0 :(得分:1)

认为这可能有效:

RETURN (CASE WHEN LEFT(@input, CHARINDEX('0', @input)-1) LIKE '%[0-9]%'
             THEN @input
             ELSE LEFT(@input, CHARINDEX('0', @input)-1) + 
 SUBSTRING(SUBSTRING(@input, PATINDEX('%0%',@input), LEN(@input)), PATINDEX('%[^0]%', SUBSTRING(@input,PATINDEX('%0%',@input),LEN(@input))),len(@input))
        END)

这只是检查第一个0是字符串中的第一个数字。