不幸的是,Sybase ASE 没有对正则表达式的任何本机支持,也没有任何用于去除尾随零的开箱即用函数。
一个明显的(?)第一次尝试可能包括一个循环结构来去除尾随零,尽管它可能更容易reverse()
去除初始字符串,去除前导零,然后reverse()
返回原始值。不幸的是,这并不完全有效,并且需要封装在用户定义的函数中(每次调用它都会带来额外的性能损失)才能在查询中使用它。
下一个想法是将零转换为可以(相对)容易地从字符串末尾剥离的东西,而ASE确实提供了rtrim()
剥离尾随空格的功能。这个想法看起来像:
- 将所有零转换为空格 [
str_replace('string','0',' ')
]
- 去掉尾随空格 [
rtrim('string')
]
- 将任何剩余的空格转换回零 [
str_replace('string',' ','0')
]
** 这显然假设原始字符串不包含任何空格。
这是一个例子:
declare @mystring varchar(100)
select @mystring = '0.025000'
-- here's a breakdown of each step in the process ...
select ':'+ @mystring + ':' union all
select ':'+ str_replace(@mystring,'0',' ') + ':' union all
select ':'+ rtrim(str_replace(@mystring,'0',' ')) + ':' union all
select ':'+ str_replace(rtrim(str_replace(@mystring,'0',' ')),' ','0') + ':'
-- and the final solution sans the visual end markers (:)
select str_replace(rtrim(str_replace(@mystring,'0',' ')),' ','0')
go
----------
:0.025000:
: . 25 :
: . 25:
:0.025:
--------
0.025
如果您需要经常使用此代码片段,那么您可能需要考虑将其包装在用户定义的函数中,但请记住,每次调用该函数时都会对性能造成轻微影响。