如何确定当年7周优惠券的出生周数

时间:2013-09-29 02:23:53

标签: sql oracle date

我正在尝试让我的客户出生日期,但是使用当前年份(sysdate)。例如,John Brown出生于01-JAN-65,我想创建一个查询,从John的生日那里检索上周一和下周日,以便客户可以看到他们的优惠券在七天时间框架之间有效。所以对于John Brown来说,这行会有三列

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美元作为对我的帮助,我正在努力学习。

我尝试从How do I get the current year using SQL on Oracle?实现代码,但我一直收到错误

2 个答案:

答案 0 :(得分: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用于测试。

答案 1 :(得分:1)

使用Oracle的TO_CHARTO_DATENEXT_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