首先探討「下週五」和「下一個週五」定義上的差別。假設今天為03-24日(一),「下週五」為04-04,此為一般所周知且常使用的定義,無需多做解釋;在將介紹「下一個週五」,即晚(大)於現在但最近(小)的週五,以03-24日(一)的下一個週五是03-28(五),此常用於以週為單位的生產、營運績效彙總報表,或者期貨轉倉日(每月第三個週三),在此將說明的如何取得此一日期。
假設今天為2014-03-24(一)
|
ORALE提供NEXT_DAY函數可直接取得下一個星期幾的日期函數。語法如下:
NEXT_DAY(date,
day_of_the_week)
|
第1個參數:目標日期
第2個參數:指定週幾(星期一、二…),可指定文字型態星期幾(語系參考NLS設定)或數字(1~7,星期天為1)
而MSSQL並無對指令,但可使用以下運算式取代。
SQL及執行結果如下。
資料庫
|
SQL / Result
|
ORACLE
|
SELECT Target
,
TO_CHAR(Target, 'DAY') "星期幾"
,
NEXT_DAY(Target, 6) "下個週五"
FROM
(
SELECT DATE'2014-03-24' + (LEVEL-1) Target
FROM DUAL
CONNECT BY LEVEL<=10
)
|
MSSQL
|
SELECT S.Target
, DATENAME(WEEKDAY, S.Target) "星期幾"
, S.Target +(7-DATEPART(DW, S.Target)+ 5)%7 +1 "下個週五"
FROM
(
SELECT DATEADD(dd, number, '2014-03-24') Target
FROM master.dbo.spt_values
WHERE 1=1
AND type ='P'
AND number <=9
) S
|
下個週五的取得 → S.Target + 7 - (DATEPART(DW,S.Target) + 1) % 7
回覆刪除可比原來減少一個運算!