0

我正在尝试获取我的客户的出生日期,但使用的是当前年份(sysdate)。例如,John Brown 出生于 01-JAN-65,我想创建一个查询,从 John 的生日中检索上周一和下周日,以便客户可以看到他们的优惠券在这 7 天的时间范围内有效. 所以对于约翰布朗来说,该行将包含三列

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

我的表定义是:

表名- 客户

Customer_ID
First_Name
Last_Name
DOB
Phone  

我已阅读 Oracle Database 11g 的第 5 章“存储和处理日期和时间”,但没有找到解决问题的方法。请帮忙,谢谢。我将向您的 PayPal 电子邮件发送 5 美元,以感谢您对我的帮助,我正在努力学习。

我试图从如何在 Oracle 上使用 SQL 获得当前年份?但我不断收到错误

4

2 回答 2

3

您需要使用NEXT_DAY函数。

with sourceData as (
  select 'John Brown' FullName, DATE '1965-01-1' BirthDate 
  from dual
), BirthDatesThisYear as
(
  select 
    FullName,
    Add_Months(BirthDate, (extract(YEAR from sysdate)- extract(YEAR from birthdate))*12) BirthDateThisYear
  from sourceData
)
select 
  FullName,
  NEXT_DAY(BirthDateThisYear-8,'MON') PreviousMonday,
  NEXT_DAY(BirthDateThisYear-8,'MON')+6 NextSundayFromPrevMonday
from BirthDatesThisYear;

SQL Fiddle供您测试。

于 2013-09-29T03:39:52.780 回答
1

使用 Oracle 的TO_CHARTO_DATE和的一个查询NEXT_DAY

SELECT name, 
       TO_DATE(TO_CHAR(SYSDATE, 'YYYY') || TO_CHAR(birthdate, 'MMDD'), 'YYYYMMDD') "This Birthday",
       NEXT_DAY(TO_DATE(TO_CHAR(SYSDATE, 'YYYY') || TO_CHAR(birthdate, 'MMDD'), 'YYYYMMDD'), 'Sun') "Sunday After",
       NEXT_DAY(TO_DATE(TO_CHAR(SYSDATE, 'YYYY') || TO_CHAR(birthdate, 'MMDD'), 'YYYYMMDD'), 'Sun') - 6 "Monday Before"
FROM Table1;

这是我的测试数据的SQL Fiddle

于 2013-09-29T03:35:14.680 回答