无法正确比较 oracle 中的 2 个日期

Posted

技术标签:

【中文标题】无法正确比较 oracle 中的 2 个日期【英文标题】:Can't compare 2 dates in oracle correctly 【发布时间】:2016-12-07 10:53:46 【问题描述】:

我有这个 sql 查询,它在 2016 年 12 月 7 日 之前检索记录,问题是,oracle 返回 2016 年 12 月 6 日及以下的记录。请问这是正确的行为吗?

SELECT DISTINCT ACCOUNT_NO
FROM TBL_CLIENT_FINANCIAL_ACTIVITY cfa
WHERE CAST(tran_date as DATE) <= TO_DATE('12/07/2016');

【问题讨论】:

SELECT ACCOUNT_NO, tran_date FROM ...。结果正确吗? 是的。它确实反映了正确的结果。问题在于日期比较。 CAST(tran_date as DATE)TO_DATE('12/07/2016') 从 WHERE 移动到选择列表。会发生什么? 澄清一下:您是说排除了确切的日期 12/07/2016,就好像您写的是 &lt; 而不是 &lt;= 输出相同的结果。 【参考方案1】:

我假设您使用的是 MM/DD/YYYY?在你的 to_date() 中声明它。

to_date('12/07/2016','MM/DD/YYYY')

另外,让我们截断该新日期以匹配您声明的日期,否则剩余的小时数分钟秒数会晚于您的 to_date 值。

trunc(CAST(tran_date as DATE)) <= to_date('12/07/2016','MM/DD/YYYY')

【讨论】:

trunc() 函数有效。我想将时间戳转换为日期是不够的。

以上是关于无法正确比较 oracle 中的 2 个日期的主要内容,如果未能解决你的问题,请参考以下文章

Oracle SQL Sysdate 无法与 nls_date_format='DD-MON-RR' 正确比较

在 where 子句问题中的 Oracle 日期比较

oracle11g中如何比较两个日期

查询中的日期比较:逻辑正确但结果错误

oracle数据库里两个字符型的日期数据怎样比较?

android比较2个日期以发现差异