首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在sybase中将数字数据类型转换为varchar而不跟踪零

在sybase中将数字数据类型转换为varchar而不跟踪零
EN

Stack Overflow用户
提问于 2018-01-04 13:00:07
回答 1查看 3.7K关注 0票数 0

如何将SQL数据类型Numerci(15,2)转换为字符串(varchar数据类型),而不添加sybase中的尾随零。

示例-在下面的abc列中,值是存在的-

代码语言:javascript
代码运行次数:0
运行
复制
0.025
0.02
NULL
0.025589
5.289

在运行查询时-

代码语言:javascript
代码运行次数:0
运行
复制
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

我不能在表示层做,有人能帮我查询吗?

EN

回答 1

Stack Overflow用户

发布于 2018-01-04 15:53:16

不幸的是,Sybase ASE没有任何本地的正则表达式支持,也没有任何开箱即用的函数来剥离尾随零。

显而易见的(?)第一次尝试可能由一个循环构造组成,以去掉尾随零,尽管这样做可能更容易一些:reverse()初始字符串,去掉前导零,然后reverse()返回原始值。不幸的是,这并不完全有效,为了在查询中使用它,需要将其封装在用户定义的函数中(每次调用它时都会带来额外的性能损失)。

下一个想法是将零转换为可以(相对地)很容易地从字符串的末尾去掉的东西,而ASE确实提供了剥离尾随空间的rtrim()函数。这个想法看起来应该是:

  • 将所有零转换为空格str_replace('string','0',' ')
  • 去掉尾随空间rtrim('string')
  • 将剩余的空格转换回零str_replace('string',' ','0')

**这显然假定原始字符串不包含任何空格。

下面是一个例子:

代码语言:javascript
代码运行次数: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

如果您需要经常使用此代码片段,那么您可能需要考虑将其封装到用户定义的函数中,但请记住,每次调用该函数时,性能都会受到轻微的影响。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48095897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档