我幾天來一直在這個問題上進行任務,並且我一直無法獲得正確的查詢。我的導師一直不太有用。問題如下: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