如何在不在sybase中添加尾随零的情况下将SQL数据类型Numerci(15,2)转换为字符串(varchar数据类型)。
示例 - 在下面的列abc中存在值 -
0.025
0.02
NULL
0.025589
5.289
运行查询 -
select STR(column,10,4) from table --- produces the results 0.025,0.0200
select CAST(column as CHAR(5)) from table -- produces the results as 0.0250 etc
我不能在表示层中这样做 有人可以帮忙查询。
答案 0 :(得分:0)
不幸的是,Sybase ASE对正则表达式没有任何本机支持,也没有用于剥离尾随零的任何开箱即用功能。
一个明显的(?)第一次尝试可能包含一个循环结构来去除尾随的零,尽管reverse()
初始字符串可能更容易,剥离前导零,然后{{1}恢复到原始值。不幸的是,这不是完全有效的,需要封装在用户定义的函数中(每次调用时引入额外的性能命中),以便在查询中使用它。
下一个想法是将零转换为可以(相对)轻松地从字符串末尾剥离的东西,并且恰好ASE会提供reverse()
函数来剥离尾随空格。这个想法看起来像:
rtrim()
] str_replace('string','0',' ')
] rtrim('string')
] **这显然假设原始字符串不包含任何空格。
以下是一个例子:
str_replace('string',' ','0')
如果您需要经常使用此代码段,那么您可能需要考虑将其包装在用户定义的函数中,但请记住,每次调用函数时都会有轻微的性能损失。
答案 1 :(得分:-1)
可以使用以下方法 - 1)它使用替换功能
select COLUMN,str_replace(rtrim(str_replace(
str_replace(rtrim(str_replace(cast(COLUMN as varchar(15)), '0', ' ')), ' ', '0')
, '.', ' ')), ' ', '.')
from TABLE
0.025
2
0.025
2
2)使用正则表达式 -
select COLUMN ,str(COLUMN ,10,3),
reverse(substring( reverse(str(COLUMN ,10,3)), patindex('%[^0]%',reverse(str(COLUMN ,10,3))), 10))
from TABLE
0.025
2
0.025
2。