问题描述
各有千秋!
select edge_id from edges where rownum = 1
返回 2.57775300147101E21
可以建议查询
select * from edges where edge_id = 2.57775300147101E21
或
select * from edges where edge_id = 2577753001471010000000
将返回一行。
但它返回“没有选择行”...
让我们继续:
select to_char(edge_id) from edges where rownum = 1
返回 2577753001471010316917
这对我来说是意外的行为...... 这种情况下如何查询表?
任何帮助将不胜感激。
解决方法
2.57775300147101E21 的显示值就是 - 显示值。实际值为 2577753001471010316917,如您的 TO_CHAR(...
查询所示,因此要检索此行(可能还有其他行),您需要使用正确的值:
SELECT *
FROM EDGES
WHERE EDGE_ID = 2577753001471010316917
或者您可以使用科学记数法中的正确值:
SELECT *
FROM EDGES
WHERE EDGE_ID = 2.577753001471010316917E21
或者您可以进行范围查询,例如:
SELECT *
FROM EDGES
WHERE EDGE_ID BETWEEN 2.5E21
AND 2.6E21
您用来查询数据库的任何工具显然都使用科学记数法显示“大”值。但是 2577753001471010316917 的值是您需要用来检索所需行的正确值。
,第一个答案是绝对正确的 - 只需将数字格式设置更改为 TME(用于科学记数法)或 TM9。 sql*plus 示例:格式 TM9:
SQL> show numf
numformat ""
SQL> select 2577753001471010316917 x from dual;
X
----------
2.5778E+21
SQL> set numf tm9
SQL> select 2577753001471010316917 x from dual;
X
----------------------------------------------------------------
2577753001471010316917
SQL> set numf tme
SQL> select 2577753001471010316917 x from dual;
X
----------------------------------------------------------------
2.577753001471010316917E+21