Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我有一个关于sql函数的问题:floor()_Sql_Oracle_Floor - Fatal编程技术网

我有一个关于sql函数的问题:floor()

我有一个关于sql函数的问题:floor(),sql,oracle,floor,Sql,Oracle,Floor,为什么使用floor执行SQL会导致299,它应该是300?您遇到了一些奇怪的精度问题 但解决方法很简单-删除多余的到_NUMBER(两个日期的差值是一个数字),然后得到正确的结果 select floor(to_number(to_date('20180620130000','yyyy-mm-dd hh24:mi:ss')-to_date('20180620080000', 'yyyy-mm-dd hh24:mi:ss'))*24*60) from dual; select to_nu

为什么使用floor执行SQL会导致299,它应该是300?您遇到了一些奇怪的精度问题

但解决方法很简单-删除多余的
到_NUMBER
(两个日期的差值是一个数字),然后得到正确的结果

select floor(to_number(to_date('20180620130000','yyyy-mm-dd hh24:mi:ss')-to_date('20180620080000', 'yyyy-mm-dd hh24:mi:ss'))*24*60)  
from dual;

select  to_number(to_date('20180620130000','yyyy-mm-dd hh24:mi:ss')-to_date('20180620080000', 'yyyy-mm-dd hh24:mi:ss'))*24*60  
from dual;

您遇到了一些奇怪的精度问题

但解决方法很简单-删除多余的
到_NUMBER
(两个日期的差值是一个数字),然后得到正确的结果

select floor(to_number(to_date('20180620130000','yyyy-mm-dd hh24:mi:ss')-to_date('20180620080000', 'yyyy-mm-dd hh24:mi:ss'))*24*60)  
from dual;

select  to_number(to_date('20180620130000','yyyy-mm-dd hh24:mi:ss')-to_date('20180620080000', 'yyyy-mm-dd hh24:mi:ss'))*24*60  
from dual;

不相关,但是:
to_number()
是无用的(实际上这是一个等待发生的错误),因为从另一个日期减去一个日期将返回一个数字。无需将该数字转换为varchar,然后再转换回一个数字(这就是
to_number()
将要做的)@a_horse\u与\u no_name
to_number
相关删除它,然后得到正确的结果。是的,你是正确的,但是:
to_number()
是无用的(实际上这是一个等待发生的bug)因为从一个日期减去另一个日期已经返回一个数字。无需将该数字转换为varchar,然后再转换回一个数字(这就是
to_number()
将要做的)@a_horse\u与\u no\u name
to_number
相关删除它,您将得到正确的结果。是的,您是right@yang是的,很有趣,确切的原因我不清楚;)日期减法的结果不是正常的(2型)数字;转储它显示了一个内部(据我所见,未记录)数据类型14,Oracle会根据需要将其转换为其他类型。它似乎保留了精确的秒数,而不是那一点的小数。通过隐式转换为字符串并返回正常数字,数据类型会发生变化,结果无法准确表示。我发现,这节省了我一些实验*8-)是的,date-date的结果是0.208333333。从dual中选择(0.208333333*24*60)作为数量,选择floor(0.208333333*24*60)作为flr;结果是300和299。@yang-(a)数据日期的结果以数字形式呈现给您(或您的客户)-请参阅我之前的评论;(b)您的
to_num
值不是300,而是299.999999995,但您的客户正在将其舍入以供显示。如果您使用的是SQL*Plus或SQL Developer,请执行
设置numwidth 17
并重试。我知道了,to_char也反映了您所说的,谢谢you@yang是的,很有趣,确切的原因我不清楚;)日期减法的结果不是正常的(2型)数字;转储它显示了一个内部(据我所见,未记录)数据类型14,Oracle会根据需要将其转换为其他类型。它似乎保留了精确的秒数,而不是那一点的小数。通过隐式转换为字符串并返回正常数字,数据类型会发生变化,结果无法准确表示。我发现,这节省了我一些实验*8-)是的,date-date的结果是0.208333333。从dual中选择(0.208333333*24*60)作为数量,选择floor(0.208333333*24*60)作为flr;结果是300和299。@yang-(a)数据日期的结果以数字形式呈现给您(或您的客户)-请参阅我之前的评论;(b)您的
to_num
值不是300,而是299.999999995,但您的客户正在将其舍入以供显示。如果您使用的是SQL*Plus或SQL Developer,请执行
设置numwidth 17
并重试。我知道了,to_char也反映了您所说的,谢谢