我正在查询以下sql。
请帮我。
select to_date(sysdate, 'DD MONTH YYYY') , to_date(sysdate, 'yyyy/mm/dd hh24:mi:ss')
from dual where
to_date(sysdate, 'DD MONTH YYYY') < to_date(sysdate, 'yyyy/mm/dd');
1) to_date(sysdate, 'DD MONTH YYYY') 这将给出没有时间的 Date 对象(可能时间是 00:00)。
我说得对吗?如果不是,我将如何获得没有时间的日期对象?
2)从上面的查询看来,to_date(sysdate,'yyyy/mm/dd')大于to_date(sysdate,'DD MONTH YYYY')。为什么??
更新
1) 我在上面的 URL 中的目的是找出 to_date 函数只会返回日期(或连同时间),尽管格式“DD MONTH YYYY”没有提及其中的时间字符(hh:mm..)。
2)从响应中我得到 to_date 将始终返回带有时间的日期,尽管我们没有提到时间字符。
3) 最后,为了只获取 DATE,我们应该使用 trunc()/to_date(to_char(sysdate,'mm-dd-yyyy'),'mm-dd-yyyy')
检查以下内容
select to_char(trunc(sysdate), 'yyyy/mm/dd hh24:mi:ss'),
to_char(to_date(to_char(sysdate, 'yyyy-MM-dd'),'yyyy/mm/dd hh24:mi:ss'),'yyyy/mm/dd hh24:mi:ss')
from dual;
-->hh24 :24 对于获取 00:00 格式很重要。
最佳答案
你简直是搬起石头砸自己的脚。它称为隐式数据类型转换。
没有 TO_DATE(date)
(这就是您所要求的),因此 Oracle 已将您的查询转换为 TO_DATE(TO_CHAR(sysdate), 'DD MONTH YYYY' )
其中 TO_CHAR(sysdate)
将选取默认的 NLS 格式掩码。根据您的默认掩码(请参阅 NLS_SESSION_PARAMETERS),您的第一个可能已解析为年份 0012,第二个可能已解析为年份 0018。因此 0012 小于 0018。
如果你想截断sysdate,那么只需执行trunc(sysdate)
关于sql - TO_DATE 为不同的格式掩码返回不同的日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13934111/