在表TBL_TXN 中查询AMT_TRANS字段,AMT_TRANS字段类型为char,希望在查出的数据中能显示2位小数位!
select AMT_TRANS from TBL_TXN 查出的AMT_TRANS字段有值,是0;
select to_number(decode(AMT_TRANS,null,0))/100 from TBL_TXN 查的出记录数,但是没有数据。
select to_char(to_number(decode(AMT_TRANS,null,0))/100,'FM9999999999999999999999990.00') from TBL_TXN 查的出记录数,但是没有数据。
希望高手指教!

解决方案 »

  1.   

    select t.id,round(to_number(nvl(AMT_TRANS,0)),2) from TBL_TXN t;
    试试~
      

  2.   

    当然没有数据了
    在decode中,若null then 0,但如果是0,没有定义,默认为null
    用nvl(AMT_TRANS,0)代替decode
      

  3.   

    select trim(to_char(AMT_TRANS,'99999999999999.99'))  from TBL_TXN;
    这样试试
      

  4.   

    谢谢各位朋友的回帖,但各位给的答案都不能用!
    AMT_TRANS字段是 char 型的。
      

  5.   

    谢谢各位的答复,我的问题解决了
    大家可以参考下:
    select to_char(to_number(decode(AMT_TRANS,null,0,0))/100,'99999999999990.99') from TBL_TXN t5
      

  6.   

    ...你这个代码得出的答案恒为0吧select to_char(nvl(to_number(AMT_TRANS),0)/100,'fm99999999999990.00') from TBL_TXN t5
      

  7.   

    不可能的
    你说的没有数据是值为空,还是没有记录
    如果没有记录的话,不会查出结果
    select to_char(nvl(to_number(AMT_TRANS),0)/100,'fm99999999999990.00') from 
    (select 1 AMT_TRANS from dual where 1=2)--如果有数据
    select to_char(nvl(to_number(AMT_TRANS),0)/100,'fm99999999999990.00') from 
    (select '123.123' AMT_TRANS from dual where 1=1)TO_CHAR(NVL(TO_NUMBER(AMT_TRAN
    1.23
    如果是空值,0.00不就是你要结果吗不能运行是什么意思?
    你的代码中
    select to_char(to_number(decode(AMT_TRANS,null,0,0))/100,'99999999999990.99') from TBL_TXN t5decode(AMT_TRANS,null,0,0)查询出的结果比如全部为0,而且是数值型的,外面的to_number没有意义。
    这段代码等价于
    select to_char(0,'99999999999990.99') from TBL_TXN t5
      

  8.   

    如果照你这么说的那么语句就是
    select to_char(nvl(to_number(AMT_TRANS),0)/100,'fm99999999999990.00') from TBL_TXN
    可是执行后会报错,报: ORA-01722:invalid number 错误!
    不能运行的!
      

  9.   

    select to_char(nvl(to_number(AMT_TRANS),0)/100,'fm99999999999990.00') from TBL_TXN 
    数据库中给定值可能有部分是空格,如果字段AMT_TRANS为空,默认为0,如AMT_TRANS为空格,怎么办?
      

  10.   

    invalid number 
    可能的原因是1.包含非数字的字符,2.数字中间有空格,3.或字段值为空格。如果空格位于两端没有影响第一种的话就没有办法。
    后两种可以这样解决
    select to_char(nvl(to_number(replace(AMT_TRANS,' ')),0)/100,'fm99999999999990.00') from TBL_TXN 第三种还可以用
    select to_char(case when AMT_TRANS>='0' then to_number(AMT_TRANS) else 0 end/100,'fm99999999999990.00') from TBL_TXN