将Numeric数据类型转换为varchar而不在sybase中尾随零

时间:2018-01-04 13:00:08

标签: sql sybase-ase15

如何在不在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

我不能在表示层中这样做 有人可以帮忙查询。

2 个答案:

答案 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。