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

Oracle TO_DATE函数的默认日期部分

askTom 2018-01-25
949

问题描述

嗨,AT-团队,

LiveSQL似乎已损坏,因此很抱歉没有测试用例。

我们正在构建一个系统,在该系统中,开发人员正在将保存仅时间数据的字符串转换为Oracle SQL中的日期,以便在以后构建涉及一天中的时间的查询。足够简单: 使用TO_DATE()。但是我想知道有关生成的datetime值的日期部分的规则。

例如。
(...)
to_date('13:00:00', 'hh24:mi:ss')
(...)

这很好。

但当我选择结果值回来:
select to_char(to_date('13:00:00', 'hh24:mi:ss'), 'yyyy-mm-dd"T"hh24:mi:ss')
from dual;


结果:
TO_CHAR(TO_DATE('13
-------------------
2018-01-01T13:00:00


所以在这里,我们看到日期值 “2018-01” 被添加到时间值to_date() 调用。我的问题是这种行为在哪里被记录?我想向开发人员提供一些建议,如何处理这个用例,我现在所拥有的就是假设当前数据库服务器系统日期的第一年的第一天,但我无法在文档中确认这一点。

有什么想法吗?

问候和感谢,
亨克

专家解答

如果这是在文档中,我找不到它;)

但是MOS note 1014079.6对此进行了讨论。它给出了以下规则

-失踪日 = 返回月1日
-缺少月份 = 返回当月

据我所知,以下规则也是正确的:

-年份缺失 = 返回当年

select to_char(sysdate, 'DD MON YYYY') today,
       to_date('FEB 2016', 'MON YYYY') no_day,
       to_date('22 2017', 'DD YYYY') no_month,
       to_date('22 MAR', 'DD MON') no_year
from   dual;

TODAY         NO_DAY                 NO_MONTH               NO_YEAR                
25 JAN 2018   01-FEB-2016 00:00:00   22-JAN-2017 00:00:00   22-MAR-2018 00:00:00   

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

评论