我想要数据0.567 输出0.56,使用下面的sql语句,
select cast(0.567 as decimal(10,2)) from dual
可是结果却是 .56
整数位的0没有被输出。
请问,这个怎么解决?

解决方案 »

  1.   

    首先楼主要理解这个SQL返回的是个数值的结果,对于数值是显示为.56还是0.56是取决于客户端本身对于数值的显示格式,与SQL本身无关。
    如果想输出整数位的0,那么有两种方法:
    1. 修改客户端对数值的显示格式,如何修改取决于你使用的客户端。
    2. 强制将结果转换成字符串格式
    select to_char(cast(0.567 as decimal(10,2)),'0.00') from dual
      

  2.   

    顶1楼,一般强转的:
    select to_char(cast(0.567 as decimal(10,2)),'0.00') from dual
      

  3.   

    用了 to_char 就没必要使用 cast 进行类型转换了
      

  4.   

    scott@TBWORA> select cast(0.567 as decimal(10,2)) as ca from dual;        CA
    ----------
           .57scott@TBWORA> col ca for 9990.99
    scott@TBWORA> select cast(0.567 as decimal(10,2)) as ca from dual;      CA
    --------
        0.57scott@TBWORA> -- 要不就直接用 to_char()函数来指定输出的格式,例如:
    scott@TBWORA> select to_char(cast(0.567 as decimal(10,2)),'9999990D99') as ca from dual;CA
    ----------------------
           0.57
      

  5.   

    select to_char(cast(0.567 as decimal(10,2)),'0.00') from dual这个方法有个问题, 我现在举例子是0.567,万一真是数据里有100.567,
    那么差出来的结果就变成####了。
      

  6.   

    不知道你是否只想要结果,还是只用上面的sql  
    select round(0.567,2) from dual;--四舍五入 结果是0.57select trunc(0.567,2) from dual;--结果是0.56
      

  7.   

    select to_char(0.567,'0.99') from dual
      

  8.   

    根据各位提供的方法,现在写成如下形式,符合我的要求。
    select trim(to_char(0.265,'99999990D99')) from dual
    想问问,就没有更简便的方法吗?最好别像这样嵌套了两层函数。
      

  9.   


    -- trim 也不需要啦,因为你 to_char()里已经指定了格式:99999990D99 (D后面两个9,表示保留两位小数)sys@TBWORA> select trim(to_char(0.265,'99999990D99')) from dual;TRIM(TO_CHAR(0.265,'9999
    ------------------------
    0.27sys@TBWORA> select to_char(0.265,'99999990D99') from dual;TO_CHAR(0.265,'99999990D
    ------------------------
            0.27
      

  10.   


    加trim是为了去掉前面的空格,不加的话,前面会有好几个空格的。
      

  11.   

    客户端显示问题
    sqlplus:set numformat 99990.99plsql developer: tool>>preference>>sql window>> number fields to char 去掉
      

  12.   

    主要是京都的问题,只要增加精度就好了
    select cast(0.567 as decimal(10,3)) from dual
      

  13.   

    为什么 不用trunc函数试一下呢,
      

  14.   

    你为什么要纠结于一个sql语句的表达方式呢?在前面我和你说过了,你的返回值是个数值型的情况下,SQL里显示为.57和0.57是没有区别的,都是同一个数,为什么你一定要在SQL处理呢?浪费时间,浪费精力。最终这个数值是用在前台的,无论是哪种语句的前台,在显示数值的时候定制出显示的格式就可以了,完全没有必要纠结在SQL里去处理。
      

  15.   

    你说得有道理,但是因为一些其他原因,前台不能做处理,查出来什么就得显示什么。
    所以我才不得不在SQL上改进。
      

  16.   

    -- oracle 的 to_char支持去除填充符的
    select to_char(0.269,'FM99,990.99') from dual