首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

SQL Server 日期邊界計算速查表:月/週/年/季首尾日一鍵獲取

     編輯:MySQL 綜合教學

SQL Server 常用日期邊界計算大全

所有公式均基於 GETDATE() 為例,實際使用請替換為目標日期欄位/變數。核心模式:DATEADD(interval, DATEDIFF(interval, 0, date) [+/- n], 0)。

一、月份邊界

-- 本月第一天 00:00:00
SELECT DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0);

-- 本月最後一天 23:59:59.997
SELECT DATEADD(ms, -3, DATEADD(month, DATEDIFF(month, 0, GETDATE()) + 1, 0));

-- 上月最後一天
SELECT DATEADD(ms, -3, DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0));

二、週邊界 (以週一為週首,依 @@DATEFIRST 設定)

-- 本週週一
SELECT DATEADD(week, DATEDIFF(week, 0, GETDATE()), 0);

-- 本月第一個週一
SELECT DATEADD(week, DATEDIFF(week, 0,
       DATEADD(day, 6 - DATEPART(day, GETDATE()), GETDATE())), 0);

三、年份邊界

-- 本年第一天
SELECT DATEADD(year, DATEDIFF(year, 0, GETDATE()), 0);

-- 本年最後一天
SELECT DATEADD(ms, -3, DATEADD(year, DATEDIFF(year, 0, GETDATE()) + 1, 0));

-- 去年最後一天
SELECT DATEADD(ms, -3, DATEADD(year, DATEDIFF(year, 0, GETDATE()), 0));

四、季度邊界

-- 本季度第一天
SELECT DATEADD(quarter, DATEDIFF(quarter, 0, GETDATE()), 0);

五、常用範圍查詢模式 (SARGable,利用索引)

-- 本月資料
WHERE create_time >= DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0)
  AND create_time <  DATEADD(month, DATEDIFF(month, 0, GETDATE()) + 1, 0);

-- 本週資料
WHERE create_time >= DATEADD(week, DATEDIFF(week, 0, GETDATE()), 0)
  AND create_time <  DATEADD(week, DATEDIFF(week, 0, GETDATE()) + 1, 0);

-- 本季資料
WHERE create_time >= DATEADD(quarter, DATEDIFF(quarter, 0, GETDATE()), 0)
  AND create_time <  DATEADD(quarter, DATEDIFF(quarter, 0, GETDATE()) + 1, 0);

六、輔助函數

需求函數範例結果
當月總天數DATEDIFF(day, GETDATE(), DATEADD(month, 1, GETDATE()))30
當前星期幾名稱DATENAME(weekday, GETDATE())星期一
當前日期 (yyyy-mm-dd)CONVERT(varchar(10), GETDATE(), 120)2024-05-20
當前時間 (hh:mi:ss)CONVERT(varchar(8), GETDATE(), 114)14:30:00

原理提示

DATEADD(ms, -3, ...) 用於將「下一個邊界 00:00:00.000」倒退 3 毫秒,得到上一個邊界的「23:59:59.997」,這是 SQL Server DATETIME 類型精度 (3.33ms) 下的最大值,確保涵蓋整天。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved