在Oracle PLSQL developer中,我将transaction_id保存为436478757463572693,但它被保存为4.36478757463573E17。
当我搜索值时,我没有得到任何输出。
select * from JT_TASK_TRANSACTION_TAB t WHERE TRANSACTION_ID=436478757463572693
但是当我像下面这样搜索时,我得到了一个记录
select * from JT_TASK_TRANSACTION_TAB t WHERE TRANSACTION_ID=436478757463573000
我如何得到我的原始值436478757463572693而不是四舍五入的4.36478757463573E17?我需要像下面这样做吗?
select TO_NUMBER( TRANSACTION_ID, '999999999999999999')
from TableA
WHERE TRANSACTION_ID=4.36478757463573E17;
但我的输出仍然像下面。
我正在使用PLSQL开发者。请帮助
交易Id的数据类型
请求输出
2条答案
按热度按时间gorkyyrv1#
该行为表明该列具有
NUMBER(15,-3)
数据类型:然后
436478757463572693
将以15位精度存储,并且刻度意味着它将四舍五入到最接近的1000。输出:
是:
| 表名|列名称|数据类型|数据_精密度|DATA_SCALE|
| --------------|--------------|--------------|--------------|--------------|
| JT_TASK_TRANSACTION_TAB|交易ID|数量|十五岁|-3|
如果您这样做:
则没有输出。
但是,将输入转换为相同的精度和比例:
输出:
| 交易ID|
| --------------|
| 436478757463573000|
我如何得到我的原始值436478757463572693而不是四舍五入的4.36478757463573E17?我需要像下面这样做吗?
4.36478757463573E17
是科学记数法,与436478757463573000
相同。不要在已经是数字的东西上使用
TO_NUMBER
。TO_NUMBER( string_value, format_model )
接受一个字符串值作为第一个参数,因此您正在执行数字到字符串的隐式转换,然后显式地将字符串转换回数字,并有效地执行:如果你想以特定的格式显示一个数字,那么使用
TO_CHAR
将其转换为格式化的字符串:如果您使用的是
NUMBER(15,-3)
数据类型,则不可能恢复原始数字,因为-3
的小数位数告诉数据库您只想存储最接近1000的数字。数据库不会存储百位、十位和个位数,因此没有什么可以“恢复”的。如果您不希望数据在表中舍入,请使用
NUMBER(18,0)
而不是NUMBER(15,-3)
。然后:
输出:
| 交易ID|
| --------------|
| 436478757463572693|
TO_CHAR
显式格式化它,或更改客户端应用程序上的设置。fiddle
x4shl7ld2#
您可以执行以下操作之一。
--在Toad视图中=〉Toad选项...=〉数据网格=〉数据
您将在SQL开发人员中进行一些设置,以更改显示设置。