【问题标题】:Using the next_day to retrieve the previous day and the following day使用 next_day 检索前一天和后一天
【发布时间】:2014-11-27 11:04:29
【问题描述】:

我有一个 sql 代码。我正在尝试使用 next_Day 函数检索上周一和下周日。我将如何使查询工作?我目前正在使用 oracle sql developer 来运行我的查询。

这是我要展示的数据:

 FullName,       Monday         Sunday
 John Brown      31-DEC-2012    06-JAN-2013

这是我目前的代码:

 SELECT First_Name, Last_Name, DOB,
 Add_Months(dob, (extract(YEAR from sysdate)- extract(YEAR from dob))*12) AS BirthDateThisYear
 FROM Customers

我尝试添加这些语句,但运行查询后出现错误:

  NEXT_DAY(BirthDateThisYear-8, 'MON') AS PreviousMonday
  NEXT_DAY((BirthDateThisYear-8)+6, 'MON') AS UpcomingSunday

【问题讨论】:

  • 我得到的错误是:ORA-00904: "BIRTHDATETHISYEAR": invalid identifier 00904. 00000 - "%s: invalid identifier" *Cause: *Action: Error at Line: 8 Column: 13

标签: sql oracle oracle11g


【解决方案1】:

我可以试试这个:

select First_Name || ' ' || Last_Name as FullName,
       NEXT_DAY(BirthDateThisYear-8, 'Monday') AS PreviousMonday,
       NEXT_DAY(BirthDateThisYear-1, 'Sunday') AS UpcomingSunday
from       
(SELECT First_Name, Last_Name, DOB,
 Add_Months(dob, (extract(YEAR from sysdate)- extract(YEAR from dob))*12) AS BirthDateThisYear
 FROM Customers)

【讨论】:

  • 你知道NEXT_DAY((BirthDateThisYear-8)中减8是做什么的吗?书上有,但是没有解释清楚。
  • @Lisa Tse 你想要上一个星期一。所以你需要 date-7 (减去一周)。但是,如果您的日期是星期一,您将获得相同的日期(并且您想要前一个日期)。这就是为什么多一天 -7-1 = -8
  • @Lisa Tse 确保上周一不是同一天
  • 啊,我明白了,这很有道理!我也是这么想的。非常感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2017-07-21
  • 1970-01-01
  • 2016-07-18
  • 1970-01-01
  • 2014-11-01
  • 2011-08-18
  • 2021-08-20
  • 1970-01-01
相关资源
最近更新 更多