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 trunc()函数的用法

oracle 日期月份处理

oracle 日期常用函数 (ADD_MONTHS,LAST_DAY,NEXT_DAY,MONTHS_BETWEEN,NEW_TIME,ROUND,TRUNC)

oracle本月上月去年

oracle时间函数

Oracle之job 常用定时时间