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

标签 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');

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/

相关文章:

php - mysql 选择多个表并返回所有结果

sql - oracle raw数据类型在where子句中

sql - 限制 2 列的组合记录

mysql - 从 2 个没有要连接的公共(public)列的表中选择查询插入查询

hadoop - 谁能告诉我为什么在使用to_date hive (1.2版)函数时为什么会为空?

sql - 插入到 sql server 中的 sql_variant 列

MySQL如何填充范围内缺失的日期?

sql - 在 oracle 中划分日期范围

sql - 与 AS400 的最新日期

mysql - TO_DATE 从 DD-MON-YY 到 YYYYMMDD