TO_DATE为不同的格式掩码返回不同的日期?

Kan*_*mar 4 sql oracle to-date

我正在查询下面的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');
Run Code Online (Sandbox Code Playgroud)

1)to_date(sysdate,'DD MONTH YYYY')这将给Date对象没有时间(可能是00:00).
我对么 ?如果不是我将如何只获得没有时间的Date对象?
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;
Run Code Online (Sandbox Code Playgroud)

- > hh24:24对于获得00:00格式非常重要.

Daz*_*zaL 8

你只是在脚下射击自己.它被称为隐式数据类型转换.

没有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)

  • @KanagaveluSugumar就像我说的那样做截断(sysdate).这是正确的方法.你的方式,是相同的结果,只是一个过于复杂的方式. (4认同)