Oracle中的日期格式问题

在我们的package我们有where如下条款。

 pp.start_date >= nvl(TO_DATE('01-JAN-2018', 'RRRR/MM/DD HH24:MI:SS'), pp.start_date)

它在客户环境中完美运行。但由于格式'RRRR/MM/DD HH24:MI:SS'如此,我们更改了如下日期。

pp.start_date >= nvl(TO_DATE('2018/01/01', 'RRRR/MM/DD HH24:MI:SS'), pp.start_date)

理想情况下它应该可以工作,因为我们已经给出了正确的格式。在第一种情况下,它返回 679 行,但在第二种情况下,它返回 0 行。我们有 679 个正确的行数。

第二个 NVL 命令有什么问题?

回答

在我看来,两者都是错误的。

如果日期值为2018/01/01,则其格式为(我认为)yyyy/mm/dd(也可以yyyy/dd/mm,仅通过查看无法判断)。从哪儿hh24:mi:ss格式从何而来?你从来没有用过。

因此,我会使用日期文字(始终是date 'yyyy-mm-dd')(因为无论如何您对时间组件都不感兴趣):

where pp.start_date >= date '2018-01-01'

没有NVL功能。为什么?因为日期文字不能是NULL.


如果它是关于其他一些列,你使用NVL,例如

where pp.start_date >= nvl(a.some_date, date '2018-01-01')

这意味着:如果使用a.some_date列代替。NULLdate '2018-01-01'


[编辑] 如果有时间分量,毕竟使用TO_DATE具有适当格式掩码的函数,例如

where pp.start_date >= to_date('2018-01-01 23:09', 'yyyy-mm-dd hh24:mi')


以上是Oracle中的日期格式问题的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>