在表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 查的出记录数,但是没有数据。
希望高手指教!
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 查的出记录数,但是没有数据。
希望高手指教!
试试~
在decode中,若null then 0,但如果是0,没有定义,默认为null
用nvl(AMT_TRANS,0)代替decode
这样试试
AMT_TRANS字段是 char 型的。
大家可以参考下:
select to_char(to_number(decode(AMT_TRANS,null,0,0))/100,'99999999999990.99') from TBL_TXN t5
你说的没有数据是值为空,还是没有记录
如果没有记录的话,不会查出结果
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
select to_char(nvl(to_number(AMT_TRANS),0)/100,'fm99999999999990.00') from TBL_TXN
可是执行后会报错,报: ORA-01722:invalid number 错误!
不能运行的!
数据库中给定值可能有部分是空格,如果字段AMT_TRANS为空,默认为0,如AMT_TRANS为空格,怎么办?
可能的原因是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