Last active
September 26, 2022 06:25
-
-
Save jame2408/acbdef5b50ac465fb5cba8d8759495f2 to your computer and use it in GitHub Desktop.
DATEADD 與 DATEDIFF 日期應用
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
DATEADD與DATEDIFF的應用: | |
1. DATEDIFF:起始日與迄日之間差異了幾天(Day)/月(MONTH)/季(QUARTER)/年(YEAR) | |
- 常見用法:DATEDIFF(Day/Week/MONTH/QUARTER/YEAR, 起日, 迄日) | |
- 起日/迄日: | |
- 日期部份若放為『0』或『''』,代表資料庫最小時間1900-01-01 00:00:00.000。 | |
- 同理,若為『-1』,代表1899-12-31 00:00:00.000。 | |
2. DATEADD:增加/減少天數(Day)/月(MONTH)/季(QUARTER)/年(YEAR),範例如下: | |
- 加一個月 DATEADD(MONTH, 1 ,GETDATE()) | |
- 減一天 DATEADD(DAY, -1 ,GETDATE()) | |
資料來源: | |
- 我的Coding之路(https://dotblogs.com.tw/lastsecret/2010/10/04/18097) | |
- ~楓花雪岳~(http://jengting.blogspot.tw/2011/09/sql-dateadddatediff.html) | |
*/ | |
--當月第一天 | |
SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) ,0) | |
--當月最後一天 | |
SELECT DATEADD(MONTH, DATEDIFF(MONTH, -1, GETDATE()), -1) | |
--當季第一天(1月1號、4月1號、7月1號、10月1號) | |
SELECT DATEADD(QUARTER, DATEDIFF(QUARTER, 0, GETDATE()), 0) | |
--當季最後一天(3月30號、6月30號、9月30號、12月31號) | |
SELECT DATEADD(QUARTER, DATEDIFF(QUARTER, -1, GETDATE()), -1) | |
--當天 00:00:00.000(午夜12點,一天的開始) | |
SELECT DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0) | |
--將西元年(datetime格式)轉換成民國年(CHAR格式) | |
select CAST(DATEDIFF(YEAR, '1911-01-01', getdate()) AS VARCHAR(3)) + | |
REPLACE(CONVERT(CHAR(5), GETDATE(), 1),'/','') | |
/* | |
取得特定日期是否為週末假日: | |
1900-01-01為星期一,用 DATEDIFF 函數算出任意日期與這一天的差異天數,再取得除以 7 的餘數,可以算出以下數據: | |
| 星期 | 餘數 | 備註 | 整除於5的值 | | |
| 一 | 0 | 工作天 | 0 | | |
| 二 | 1 | 工作天 | 0 | | |
| 三 | 2 | 工作天 | 0 | | |
| 四 | 3 | 工作天 | 0 | | |
| 五 | 4 | 工作天 | 0 | | |
| 六 | 5 | 週末 | 1 | | |
| 日 | 6 | 週末 | 1 | | |
從上表可知我們若要透過 T-SQL 語法計算該日期是否為週末假日,就可以用以下語法取得 True/False 型態的結果 | |
資料來源:The Will Will Web(http://blog.miniasp.com/post/2009/01/20/How-to-use-simple-T-SQL-to-get-weekend-status-in-date.aspx) | |
*/ | |
select DATEDIFF(DAY, 0, '2016-08-28') % 7 / 5 -- 1 (星期日) | |
select DATEDIFF(DAY, 0, '2016-08-29') % 7 / 5 -- 0 (星期一) | |
select DATEDIFF(DAY, 0, '2016-08-30') % 7 / 5 -- 0 (星期二) | |
select DATEDIFF(DAY, 0, '2016-08-31') % 7 / 5 -- 0 (星期三) | |
select DATEDIFF(DAY, 0, '2016-09-01') % 7 / 5 -- 0 (星期四) | |
select DATEDIFF(DAY, 0, '2016-09-02') % 7 / 5 -- 0 (星期五) | |
select DATEDIFF(DAY, 0, '2016-09-03') % 7 / 5 -- 1 (星期六) | |
select DATEDIFF(DAY, 0, getdate()) % 7 / 5 -- 看執行結果為0或1就知道是否為週末 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment