# 取得指定日期區間及星期幾 ###### tags: `SQL` ## 語法 ( 已包含註解就不再另外打說明 ) ``` SELECT -- 用來作為加幾天的數字,從 master..spt_values 系統資料表獲得,number 最高到 2047,所以最多只能撈到 5 年的範圍區間喔 number, -- DATEADD 日期的相加,參數說明:DD = 被加的單位, number = 加幾天 DATEADD(dd, number, '2017-06-13') AS DATEADD, convert(char(10), DATEADD(dd, number, '2017-06-13'),120) AS DATE, -- DATEDIFF 日期的差異比對,參數說明:HH = 差幾小時, 指定日期(區間), 欲比較的日期 DATEDIFF(HH,DATEADD(dd, number, '2017-06-13'),'2017-06-17') AS DATEDIFF, -- DATEPART 取得指定日期部分的整數,參數說明: DW = weekday(星期幾) 1 為星期日、2 為星期一..., 指定日期(區間) DATEPART(DW, DATEADD(dd, number, '2017-06-13')) AS WEEKDATE FROM -- 系統資料表 master..spt_values WHERE -- 只是用來取 Type 為 P 的 number type = 'P' -- 取得指定的日期區間的日期 ( 差異比對 0 ~ 正整數 的值 ) AND DATEDIFF(HH,DATEADD(dd, number, '2017-06-13'),'2017-06-17') >= 0 ``` ## 結果 ![](https://i.imgur.com/620nFpD.png) ## 特別說明 DATEDIFF(HH,DATEADD(dd, number, '2017-06-13'),'2017-06-17') >= 0 這個條件 * 若 >0 取得有差異且為正整數的值 * 若 >=0 取得無差異 & 有差異且為正整數的值 看看若沒有此條件的話會出現甚麼結果 ![](https://i.imgur.com/QuDN5UD.png) 出現了其他為負數的日期,那些日期不在我們查詢的區間中