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

SQL Server 日期時間函數完整速查表與實務範例

     編輯:關於SqlServer

核心函數一覽

函數用途範例結果說明
GETDATE()取得目前系統日期時間SELECT GETDATE()2024-01-15 14:30:45.123
DATEADD(interval, number, date)日期加減運算SELECT DATEADD(day, 2, '2004-10-15')2004-10-17 00:00:00.000
DATEDIFF(interval, start, end)兩日期差值(單位由 interval 決定)SELECT DATEDIFF(day, '2004-09-01', '2004-09-18')17
DATEPART(interval, date)取得日期指定部分的整數值SELECT DATEPART(month, '2004-10-15')10
DATENAME(interval, date)取得日期指定部分的字串名稱SELECT DATENAME(weekday, '2004-10-15')星期五
DAY()/MONTH()/YEAR()取得日/月/年(等同 DATEPART 簡寫)SELECT DAY(GETDATE())15

Interval 參數對照表

日期部分縮寫說明範圍
Yearyy, yyyy年1753-9999
Quarterqq, q季1-4
Monthmm, m月1-12
Day of Yeardy, y年間第幾天1-366
Daydd, d日1-31
Weekdaydw, w週內第幾天1-7
Weekwk, ww年間第幾週0-51
Hourhh時0-23
Minutemi, n分0-59
Secondss, s秒0-59
Millisecondms毫秒0-999

常用格式化輸出 (CONVERT)

-- 日期:YYYY-MM-DD
SELECT CONVERT(VARCHAR(10), GETDATE(), 120);

-- 時間:HH:MI:SS
SELECT CONVERT(VARCHAR(8), GETDATE(), 114);

-- 完整:YYYY-MM-DD HH:MI:SS
SELECT CONVERT(VARCHAR(19), GETDATE(), 120);

-- 中文格式:2024年01月15日
SELECT DATENAME(year, GETDATE()) + '年' + 
       RIGHT('0' + DATENAME(month, GETDATE()), 2) + '月' + 
       RIGHT('0' + DATENAME(day, GETDATE()), 2) + '日';

實務常用片段

本月第 1 天 / 最後 1 天

-- 月初
SELECT DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0);

-- 月底
SELECT DATEADD(day, -1, DATEADD(month, DATEDIFF(month, 0, GETDATE()) + 1, 0));

本週一 / 週日

-- 週一 (SET DATEFIRST 1 時)
SELECT DATEADD(week, DATEDIFF(week, 0, GETDATE()), 0);

-- 週日
SELECT DATEADD(day, 6, DATEADD(week, DATEDIFF(week, 0, GETDATE()), 0));

年齡計算

DECLARE @BirthDate DATE = '1990-05-20';
SELECT DATEDIFF(year, @BirthDate, GETDATE()) - 
       CASE WHEN DATEADD(year, DATEDIFF(year, @BirthDate, GETDATE()), @BirthDate) > GETDATE() THEN 1 ELSE 0 END;

工作日計算(排除週末)

CREATE FUNCTION dbo.fn_WorkDays(@Start DATE, @End DATE)
RETURNS INT AS BEGIN
    DECLARE @Days INT = DATEDIFF(day, @Start, @End) + 1;
    DECLARE @Weeks INT = @Days / 7;
    DECLARE @Remain INT = @Days % 7;
    DECLARE @StartDow INT = DATEPART(weekday, @Start);
    RETURN @Weeks * 5 + 
           CASE WHEN @StartDow + @Remain - 1 <= 5 THEN @Remain 
                WHEN @StartDow <= 5 THEN 6 - @StartDow 
                ELSE 0 END;
END;

版本差異提醒

  • SQL Server 2008+ 新增 DATE, TIME, DATETIME2, DATETIMEOFFSET 型別,精度更高、儲存更小。
  • EOMONTH() (2012+) 直接取得月底日期。
  • DATEFROMPARTS() (2012+) 組合日期更直觀。

結語

熟練掌握日期時間函數與 Interval 參數,能大幅簡化商業邏輯中的時間運算,減少 Bug 產生。建議收藏對照表,實務中隨查隨用。

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