我几天来一直在这个问题上进行任务,并且我一直无法获得正确的查询。我的导师一直不太有用。问题如下:Oracle SQL - 两天前和七天后发生的周年纪念
“系统会要求您准备两天前和七天后发生的员工纪念日清单,该列表应从EMPLOYEES表中检索包含EMPLOYEE_ID,FIRST_NAME,LAST_NAME的行,JOB_ID和HIRE_DATE列根据HIRE_DATE值的日期和月份组成升序排列,另外一个表达式为ANNIVERSARY的表达式需要根据下表返回一个描述性消息,有几种方法可以解决这个问题:
招聘意向DAY ------------------------- 消息
前两天------------------------前天
前一天-------------- -----------昨天
今天----------------------------------今天
明天-----------------------------明天
未来两天---------- ----明天从今天
七天内----本周晚些时候又一天
提示:使用CASE/WHEN,TO_CHAR和TO_NUMBER功能
您的结果将取决于哪个日期执行查询的不同而不同“。
我已经能够想出下面的查询,但它并没有考虑到当它是一年的结束和纪念日是在一月初:
SELECT EMPLOYEE_ID, FIRST_NAME, LAST_NAME, JOB_ID, HIRE_DATE,
CASE WHEN TO_DATE(TO_CHAR(HIRE_DATE,'DDMM'),'DDMM') - TRUNC(SYSDATE) = -2 THEN 'Day before yesterday'
WHEN TO_DATE(TO_CHAR(HIRE_DATE,'DDMM'),'DDMM') - TRUNC(SYSDATE) = -1 THEN 'Yesterday'
WHEN TO_DATE(TO_CHAR(HIRE_DATE,'DDMM'),'DDMM') - TRUNC(SYSDATE) = 0 THEN 'Today'
WHEN TO_DATE(TO_CHAR(HIRE_DATE,'DDMM'),'DDMM') - TRUNC(SYSDATE) = 1 THEN 'Tomorrow'
WHEN TO_DATE(TO_CHAR(HIRE_DATE,'DDMM'),'DDMM') - TRUNC(SYSDATE) = 2 THEN 'Day after tomorrow'
WHEN TO_DATE(TO_CHAR(HIRE_DATE,'DDMM'),'DDMM') - TRUNC(SYSDATE) BETWEEN 2 AND 7 THEN 'Later this week'
ELSE TO_CHAR(HIRE_DATE, 'MON-DD')
END
AS "ANNIVERSARY"
FROM EMPLOYEES
ORDER BY TO_CHAR(HIRE_DATE, 'MMDD');
任何帮助将是很大的不胜感激!谢谢!
我应该在我使用Oracle 11g文件中指明,它似乎并没有认识到DATESERIAL()。 – Godiegogo
显然,Oracle的'DateSerial(year,month,day)'等价(在其他SQL方言中)是'MAKEDATE(year month day)'(不含逗号)。 –
非常感谢您的帮助! – Godiegogo