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_TIMESTAMP | datetime | ~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()在同一個批次中多次呼叫會返回相同的值(語句開始時的時間)。