暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 为什么年到月的间隔与日到秒的间隔相比返回一个错误的值?

askTom 2018-04-07
273

问题描述

嗨,汤姆,
当我通过一本书中的一个例子时,我遇到了一个我无法解决的问题。
它涉及以下两个脚本及其结果:

脚本1:
SELECT loan_id,due_date, tool_out_date,
NUMTOYMINTERVAL(due_date - tool_out_date, 'YEAR') "Years"
from loan;

Result Set 1:
loan_id | due_date | tool_out_date | Years
-------------------------------------------
   7      17-02-11     17-02-04     +07-00
   8      17-01-05     17-01-02     +03-00


脚本2:
SELECT loan_id,due_date, tool_out_date,
NUMTODSINTERVAL(due_date - tool_out_date, 'DAY') "Days"
from loan;

Result Set 2:
loan_id | due_date | tool_out_date | Days
-------------------------------------------------------
   7      17-02-11     17-02-04     +07 00:00:00.000000
   8      17-01-05     17-01-02     +03 00:00:00.000000


基于这些脚本和结果集,结果集2很有意义,因为它返回两个日期之间的天数间隔。我不明白为什么脚本1多年来无法返回正确的值,因为这两行2017年出现,所以我猜这几年都是0?相反,它返回显示间隔分别为7年和3年的值。

任何帮助将不胜感激,以帮助我理解为什么会发生这种情况。
谢谢。



专家解答

NUMTOYMINTERVAL是一个 * 构造函数 *,即,它用于 * 构建 * 一个间隔。

因此,如果我想间隔4年,我会发出:

NUMTOYMINTERVAL(4,'年')

所以在你的情况下,我们是:

1) 评估返回数字数据类型的 “due_date-tool _ out _ date”
2) 将该数字传递到构造函数中

它为NUMTODS “工作”,因为 “巧合” 日期减法返回 * 天 * 的数量,并且您在numtodsinterval中使用 'DAY'。例如,如果你做了:

NUMTODSINTERVAL(due_date-tool_out_date,'SECOND') 你不会得到秒数,你会得到 '7' 秒 (就像你得到7年)。

像这样看两个日期之间的平均年份

https://asktom.oracle.com/pls/asktom/asktom.search?tag=calculating-age-in-terms-of-yearsmonths-and-days


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论