怎样去掉多余的0

有一个字段定义为ARPU_VALUE  DECIMAL(18, 2),当我用CHAR对它转换时,结果变为0000000000000062.70,怎么把前面多余的0去掉?

作者: ninth   发布时间: 2005-06-07

自己顶

作者: ninth   发布时间: 2005-06-08

变通一下, 不用char函数来转换类型.

在应用里还是用double类型把数据取出来

然后用C里的sprintf函数把数字转换成字符串,就没有前导0了!

作者: 我是马甲   发布时间: 2005-06-08

char(bigint(ARPU_VALUE))

作者: zcj_csdn   发布时间: 2005-07-03

应该在应用程序里先取出数值,再转换成char类型,直接转不好转。

作者: rheet1978   发布时间: 2005-07-03

试一下:

  1. D:\>;db2 "values char(decimal(62.7,18,2))"

  2. 1
  3. --------------------
  4. 0000000000000062.70

  5.   1 条记录已选择。


  6. D:\>;db2 "values substr(char(decimal(62.7,18,2)),posstr(char(decimal(62.7,18,2)),ltrim(rtrim(char(int(decimal(62.7,18,2)))))) )"

  7. 1
  8. --------------------
  9. 62.70

  10.   1 条记录已选择。
复制代码


实际为:

  1. substr(char(ARPU_VALUE),posstr(char(ARPU_VALUE),ltrim(rtrim(char(int(ARPU_VALUE)))))-1 )
复制代码


思路为通过posstr取出整数位置,再用substr截取!

还有其它办法,比如:整数||小数等

其实还是通过具体应用解决较为方便!

作者: mymm   发布时间: 2005-07-04

谢了,收藏;不过还是建议在程序中实现转换,在sql中实现转换个人认为比较麻烦

作者: rheet1978   发布时间: 2005-07-05

楼上给出的这个算法我很启发,但是有一点小问题,就是当整数部分为0(如0.85)时得出的结果与直接用char()函数得出的结果相同,即没有达到去前导0的效果。
改进后的算法应该是:select rtrim(char(int(amt)))||substr(char(amt),posstr(char(amt),'.')) from table_name
其中amt是decimal型的字段名,table_name为表名。

作者: vprofessor   发布时间: 2011-01-10