Skip to content

Note

不挑戰記憶力的技術筆記

Menu
Menu

[SQL] 常用的日期函式 DATEADD, DATEDIFF, DATEPART 應用

Posted on 2015 年 9 月 24 日2022 年 11 月 14 日 by febr

常見的用法為計算起迄日之間差了幾天(月/年),或是增加天數

情境和用法

DATEADD

當月的第一天、最後一天的日期

--當月第一天
SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) ,0)

--當月最後一天
SELECT DATEADD(MONTH, DATEDIFF(MONTH, -1, GETDATE()), -1)

--當季,使用QUARTER(1月、4月、7月、10月)
SELECT DATEADD(QUARTER, DATEDIFF(QUARTER, 0, GETDATE()), 0)
SELECT DATEADD(QUARTER, DATEDIFF(QUARTER, -1, GETDATE()), -1)

--當天+時間 00:00:00.000
SELECT DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0)

DATEPART

星期幾

因為 DATEPART return value 取決於 SET DATEFIRST 所設定的值,預設為星期日,可以透過 @@DATEFIRST 得知目前設定的值

--default 為 7 (星期日)
SELECT @@DATEFIRST

若預設為星期日,則星期日為 1, 星期一為 2……星期六為 7。

SELECT DATEPART(WEEKDAY, '19000101') --2
SELECT DATEPART(WEEKDAY, '19000102') --3

DATEDIFF

找出周末

data types 中可以看見日期時間是有範圍限制的,恰巧1900-01-01和1753-01-01都是星期一

因此可以利用這兩個日期來除以7取得餘數,計算出星期幾,再除以5判斷是否為周末

SELECT DATEDIFF(DAY, '19000101', '2015-01-05') % 7 -- 0
SELECT DATEDIFF(DAY, '19000101', '2015-01-06') % 7 -- 1
SELECT DATEDIFF(DAY, '19000101', '2015-01-07') % 7 -- 2
SELECT DATEDIFF(DAY, '19000101', '2015-01-08') % 7 -- 3
SELECT DATEDIFF(DAY, '19000101', '2015-01-09') % 7 -- 4
SELECT DATEDIFF(DAY, '19000101', '2015-01-10') % 7 -- 5
SELECT DATEDIFF(DAY, '19000101', '2015-01-11') % 7 -- 6
SELECT DATEDIFF(DAY, '19000101', '2015-01-05') % 7 / 5 -- 0
SELECT DATEDIFF(DAY, '19000101', '2015-01-06') % 7 / 5 -- 0
SELECT DATEDIFF(DAY, '19000101', '2015-01-07') % 7 / 5 -- 0
SELECT DATEDIFF(DAY, '19000101', '2015-01-08') % 7 / 5 -- 0
SELECT DATEDIFF(DAY, '19000101', '2015-01-09') % 7 / 5 -- 0
SELECT DATEDIFF(DAY, '19000101', '2015-01-10') % 7 / 5 -- 1
SELECT DATEDIFF(DAY, '19000101', '2015-01-11') % 7 / 5 -- 1

發佈留言 取消回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

近期文章

  • [AWS] S3 Object Initiate restore (復原回 Standard)
  • [Windows] 使用者快速登出的方法 Logout/ Logoff/Sign Out from Windows User Account
  • [Windows] Windows 11 安裝Server管理工具Install RSAT(Remote Server Administrator Tools)
  • Chrome出現:你的連線不是私人連線 Your connection is not private
  • [C#] 取得 Request URL 的方法

近期留言

    彙整

    分類

    • Ajax
    • Android
    • ASP
    • ASP.NET MVC
    • Azure
    • C#
    • Cisco
    • CSS
    • Delphi
    • Developer Tools
    • Framework
    • FreeBSD
    • Git
    • HTML5
    • javascript
    • jQuery
    • Juniper
    • Linux
    • Mac
    • PHP
    • Python
    • Server&OS
    • Software
    • SQL server
    • Sublime Text
    • Ubuntu
    • Visual Studio
    • Vmware
    • Web Design
    • Web Development
    • Windows
    • WordPress
    • 未分類
    • 未分類

    彙整

    分類

    • Ajax
    • Android
    • ASP
    • ASP.NET MVC
    • Azure
    • C#
    • Cisco
    • CSS
    • Delphi
    • Developer Tools
    • Framework
    • FreeBSD
    • Git
    • HTML5
    • javascript
    • jQuery
    • Juniper
    • Linux
    • Mac
    • PHP
    • Python
    • Server&OS
    • Software
    • SQL server
    • Sublime Text
    • Ubuntu
    • Visual Studio
    • Vmware
    • Web Design
    • Web Development
    • Windows
    • WordPress
    • 未分類
    • 未分類

    其他操作

    • 登入
    • 訂閱網站內容的資訊提供
    • 訂閱留言的資訊提供
    • WordPress.org 台灣繁體中文
    © 2025 Note | Powered by Superbs Personal Blog theme