无法正确比较 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,就好像您写的是 <
而不是 <=
?
输出相同的结果。
【参考方案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 个日期的主要内容,如果未能解决你的问题,请参考以下文章