oracle LAST_DAY(sysdate) 比较问题
Posted
技术标签:
【中文标题】oracle LAST_DAY(sysdate) 比较问题【英文标题】:oracle LAST_DAY(sysdate) comparison problem 【发布时间】:2011-07-12 13:06:46 【问题描述】:假设我有一个日期列,其日期为 2011 年 7 月 31 日。 我使用返回 31-JUL-11 的 LAST_DAY(sysdate) 获取该月的最后一个日期。但是当我做一个简单的 = 比较时,它没有给出结果..我的意思是假设 tablename.lastdateofmonth = LAST_DAY(sysdate) 它没有给出结果,但是如果我使用 tablename.lastdateofmonth = to_date('2011/07/31' , 'yyyy/mm/dd') 它给出了结果。
谢谢。
【问题讨论】:
【参考方案1】:last day 使当前日期成为该月的最后一天。但是它保持时间。 如果您要按天-月-年比较它们,则必须截断这些值。截断它们将解决您的问题。
tablename.lastdateofmonth = trunc(LAST_DAY(sysdate))
【讨论】:
请记住...根据值在数据库中的存储方式,您可能还需要两边都有一个 trunc()。【参考方案2】:LAST_DAY(sysdate) 将返回该月的最后一个日期,包括时间部分。
看起来 lastdateofmonth 列中的数据只有日期部分,而 imte 部分默认为 12:00 AM。
试试这个:
tablename.lastdateofmonth = TRUNC(LAST_DAY(sysdate))
【讨论】:
【参考方案3】:last_day() 保留 sysdate 的时间部分。像这样与 trunc() 一起使用:
select *
from table_name
where lastdateofmonth = last_day(trunc(sysdate));
【讨论】:
以上是关于oracle LAST_DAY(sysdate) 比较问题的主要内容,如果未能解决你的问题,请参考以下文章
oracle 日期常用函数 (ADD_MONTHS,LAST_DAY,NEXT_DAY,MONTHS_BETWEEN,NEW_TIME,ROUND,TRUNC)