我有0.8和0.80等数据。在我的选择查询中,我得到错误的数据。
例如
从双重中选择0.80;
从双重中选择0.8;
两者都给出0.8,但我的期望是当值为0.80时显示o.80。 我发现所有情况0.90,0.70 ..... 如何实现这个
答案 0 :(得分:1)
如果数据类型为NUMBER(例如,它在select 0.8 from dual
中),则0.8和0.80无法区分 - 它们的内部存储方式与dump
函数显示的方式相同:
with data (n) as
( select 0.8 from dual
union all
select 0.80 from dual
union all
select 0.800000 from dual
)
select n, dump(n) from data;
0.8 Typ=2 Len=2: 192,81
0.8 Typ=2 Len=2: 192,81
0.8 Typ=2 Len=2: 192,81
因此Oracle无法以不同方式显示它们。如果您想要VARCHAR2字符串而不是NUMBER,请使用select '0.8' from dual
。
答案 1 :(得分:0)
select Ltrim(To_char(0.80, 'B999999999999999999990.99'), ' ') as bn from dual
答案 2 :(得分:0)
0.8
,0.80
和0.80000
都是相同的数字,但格式不同。
Oracle的数字内部表示并不存储您在输入时对其进行格式化的方式,因此0.8
,0.80
和0.8000
都将保存在数据库内存中作为数字0.8
。
您正在返回一个数字而不是格式化字符串,因此Oracle将返回0.8
并让用户界面(例如SQL / Plus)显示它认为合适的内容。
如果您想要具有特定格式的数字(即总是带有两个小数位),那么您需要将数字转换为该数字的格式化字符串表示形式:
SELECT TO_CHAR( your_number, 'FM99999999990D00' ) FROM DUAL;
如果您希望数字格式与输入完全一致(带有前导和/或尾随零),那么您需要将这些数字存储为字符串以保持格式:
SELECT '0.8' FROM DUAL;
SELECT '0.80' FROM DUAL;
SELECT '00.8' FROM DUAL;