【发布时间】:2017-04-03 20:32:52
【问题描述】:
我必须创建一个修剪前导零的函数。然而,它比仅仅摆脱第一个零要复杂一些。
几个例子和结果:
- 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
我无法让它工作。查询应该找到第一个数字字符串并修剪它的前导零。现在似乎要做的是搜索第一个零并将其删除。
有人可以帮我吗?
非常感谢各位。
【问题讨论】:
-
我建议您使用
WHILE循环。虽然可能有一种方法可以通过字符串匹配来完成此操作,但WHILE可能是工作代码的最快路径。 -
如果整个字符串中唯一的数字是一个零,你想做什么?
-
@SteveLovell 那么零应该保留而不被修剪。这在 Gordon Linoff 的查询中似乎很有效。但是,ZBET000000 应该变成 ZBET0。有没有办法做到这一点?
标签: sql sql-server function stored-procedures