Oracle 查询varchar2丢失数据问题

cqhclys 2010-08-18 08:53:47

在数据库中有张表的字段 假如是 value varchar2(30);其中有一个值是 0.02或者-0.02

当用sql 查询的时候 有时候查询出来的结果是 .02 或者 -.02

这个是Oracle 的bug吗? 为什么用varchar2来存放小数的时候偶尔会出现这个问题?

此问题困扰我好几天啦?
...全文
175 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
murton 2010-08-24
  • 打赏
  • 举报
回复
试了一下,没发现楼主所说的问题:

SQL> INSERT INTO hdz_test_tab VALUES('-0.02');

1 row inserted
SQL> INSERT INTO hdz_test_tab VALUES('0.02');

1 row inserted
SQL> INSERT INTO hdz_test_tab VALUES('-0.02');

1 row inserted
SQL> INSERT INTO hdz_test_tab VALUES('-0.02');

1 row inserted
SQL> INSERT INTO hdz_test_tab VALUES('0.02');

1 row inserted
SQL> SELECT to_number(t.prdcode) FROM hdz_test_tab t;

TO_NUMBER(T.PRDCODE)
--------------------
-0.02
0.02
-0.02
-0.02
0.02

SQL> select * from hdz_test_tab;

PRDCODE
--------------------
-0.02
0.02
-0.02
-0.02
0.02

SQL>


楼主是不是在用ibatis之类的调用存储过程?貌似在转为java的数字类型时,会有这种问题。我现在也没深入研究过,目前的解决办法是发现是.**的时候就在前面加上个0,再在页面上显示。
心中的彩虹 2010-08-19
  • 打赏
  • 举报
回复
[Quote=引用楼主 cqhclys 的回复:]
在数据库中有张表的字段 假如是 value varchar2(30);其中有一个值是 0.02或者-0.02

当用sql 查询的时候 有时候查询出来的结果是 .02 或者 -.02

这个是Oracle 的bug吗? 为什么用varchar2来存放小数的时候偶尔会出现这个问题?

此问题困扰我好几天啦?
[/Quote]

可能你的语句把这个字段转为number型的数据 所以就会出现上面的情况

也可以这样 col 列名 format '999,990.99'
minitoy 2010-08-19
  • 打赏
  • 举报
回复
你用什么语句查询的?看看
虫洞 2010-08-18
  • 打赏
  • 举报
回复
用number存会省略首位0
varchar2存小数没遇到楼主的问题

iqlife 2010-08-18
  • 打赏
  • 举报
回复
不太可能,把表结构贴出来,查询结果贴出来,

17,135

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧