SQL Server GETDATE() 函數 (取得現在的日期時間)

GETDATE() 是 SQL Server 中用來取得當前日期和時間的函數。它返回資料庫伺服器當前的系統時間,型別為 datetime

GETDATE() 語法 (Syntax)

GETDATE()

GETDATE() 不需要任何參數。

GETDATE() 函數用法範例 (Example)

基本用法

SELECT GETDATE() AS CurrentDateTime;
-- 結果:2024-11-22 14:30:45.123

取得當前日期(不含時間)

SELECT CAST(GETDATE() AS DATE) AS CurrentDate;
-- 結果:2024-11-22

SELECT CONVERT(DATE, GETDATE()) AS CurrentDate;
-- 結果:2024-11-22

取得當前時間(不含日期)

SELECT CAST(GETDATE() AS TIME) AS CurrentTime;
-- 結果:14:30:45.1230000

SELECT CONVERT(TIME, GETDATE()) AS CurrentTime;
-- 結果:14:30:45.1230000

在 INSERT 語句中使用

INSERT INTO orders (product_name, order_date)
VALUES ('Laptop', GETDATE());

設定預設值

CREATE TABLE orders (
    order_id INT IDENTITY(1,1) PRIMARY KEY,
    product_name NVARCHAR(100),
    order_date DATETIME DEFAULT GETDATE()
);

相關日期時間函數

SQL Server 提供了多種取得當前日期時間的函數,它們的精度和返回型別有所不同:

函數返回型別精度範例結果
GETDATE()datetime~3.33 毫秒2024-11-22 14:30:45.123
CURRENT_TIMESTAMPdatetime~3.33 毫秒2024-11-22 14:30:45.123
SYSDATETIME()datetime2(7)100 奈秒2024-11-22 14:30:45.1234567
SYSDATETIMEOFFSET()datetimeoffset(7)100 奈秒2024-11-22 14:30:45.12 +08:00
SYSUTCDATETIME()datetime2(7)100 奈秒2024-11-22 06:30:45.1234567 (UTC)
GETUTCDATE()datetime~3.33 毫秒2024-11-22 06:30:45.123 (UTC)
SELECT 
    GETDATE() AS GetDate,
    CURRENT_TIMESTAMP AS CurrentTimestamp,
    SYSDATETIME() AS SysDateTime,
    SYSDATETIMEOFFSET() AS SysDateTimeOffset,
    GETUTCDATE() AS GetUtcDate,
    SYSUTCDATETIME() AS SysUtcDateTime;

GETDATE() vs CURRENT_TIMESTAMP

CURRENT_TIMESTAMP 是 ANSI SQL 標準,功能與 GETDATE() 完全相同:

-- 以下兩個查詢結果相同
SELECT GETDATE();
SELECT CURRENT_TIMESTAMP;

實際應用範例

計算日期差異

SELECT 
    order_id,
    order_date,
    DATEDIFF(DAY, order_date, GETDATE()) AS days_since_order
FROM orders;

篩選今天的記錄

SELECT * FROM orders 
WHERE CAST(order_date AS DATE) = CAST(GETDATE() AS DATE);

篩選最近 7 天的記錄

SELECT * FROM orders 
WHERE order_date >= DATEADD(DAY, -7, GETDATE());

取得本月第一天

SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0) AS FirstDayOfMonth;
-- 結果:2024-11-01 00:00:00.000

取得本月最後一天

SELECT EOMONTH(GETDATE()) AS LastDayOfMonth;
-- 結果:2024-11-30

-- 或使用 DATEADD
SELECT DATEADD(DAY, -1, DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) + 1, 0)) AS LastDayOfMonth;

取得今年第一天

SELECT DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0) AS FirstDayOfYear;
-- 結果:2024-01-01 00:00:00.000

注意事項

  • GETDATE() 返回的是資料庫伺服器的本地時間,不是客戶端的時間。
  • 如果需要 UTC 時間,應使用 GETUTCDATE()SYSUTCDATETIME()
  • 如果需要更高精度的時間戳記,應使用 SYSDATETIME() 而非 GETDATE()
  • GETDATE() 在同一個批次中多次呼叫會返回相同的值(語句開始時的時間)。

更多 SQL Server 相關的日期時間函數在這邊
更多 MySQL 相關的日期時間函數在這邊