---
# System prepended metadata

title: 取得指定日期區間及星期幾
tags: [SQL]

---

# 取得指定日期區間及星期幾
###### 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)

出現了其他為負數的日期，那些日期不在我們查詢的區間中