小编典典

避免在DB Float列中插入指数值

sql

我有一张表

CONTACT

Name                           Null     Type                                                                                                                                                                                          
------------------------------ -------- -----------
CONTACT_ID                     NOT NULL NUMBER                                                                                                                                                                                        
NAME                           NOT NULL VARCHAR2(45)                                                                                                                                                                                  
EMAIL                          NOT NULL VARCHAR2(45)                                                                                                                                                                                  
ADDRESS                        NOT NULL VARCHAR2(45)                                                                                                                                                                                  
TELEPHONE                      NOT NULL VARCHAR2(45)                                                                                                                                                                                  
AMOUNT                         NOT NULL FLOAT(126)

插入语句是:

Insert into  contact("CONTACT_ID","NAME","EMAIL","ADDRESS","TELEPHONE","AMOUNT")
values ('36','babusailesh1117777','hainatu1@gmail.com','Vietnam1',
  '0904277091','0.0000000555559080767');

当我看到插入数据库中的最终值时,我看到了一个指数值。

如何在所有表的数据库级别避免这种情况?


阅读 168

收藏
2021-04-15

共1个答案

小编典典

它不是以指数形式存储,而是以Oracle内部数字表示形式存储。查询时,它将以您会话的当前数字格式显示:

select 0.0000000555559080767 from dual;

                  0.0000000555559080767
---------------------------------------
                                5.6E-08

您可以在SQL * Plus或SQL Developer中覆盖以下内容:

set numformat 999.9999999999999999999
select 0.0000000555559080767 from dual;

   0.0000000555559080767
------------------------
    .0000000555559080767

或将值显式格式化为字符串,仅用于显示:

set numf ""
select to_char(0.0000000555559080767, '9990.9999999999999999999') from dual;

TO_CHAR(0.000000055555908
-------------------------
    0.0000000555559080767

如果您有一个客户端应用程序检索并使用该值,则它应以浮点数的形式查询该值,并将其转换为适合该客户端语言的数据类型,然后由客户端决定如何显示该值。


您也不应该在float列中插入字符串,而只是进行隐式转换。您插入内容中的最后一个参数应该是0.0000000555559080767引号而不是引号'0.0000000555559080767'

2021-04-15