GETDATE() -- 精度 3.33ms,預設顯示至秒
-- 作為欄位預設值
CREATE TABLE site_log (
username VARCHAR(40),
useractivity VARCHAR(100),
entrydate DATETIME DEFAULT GETDATE()
);
SELECT CONVERT(VARCHAR(30), GETDATE(), 9); -- 含毫秒:Nov 30 1997 3:29:55:170AM
常用樣式代碼:
| 代碼 | 標準 | 輸出範例 |
|---|---|---|
| 0 | Default | Mon DD YYYY HH:MIAM |
| 1 | USA | MM/DD/YY |
| 3 | British/French | DD/MM/YY |
| 8 | - | HH:MI:SS |
| 9 | Default + ms | Mon DD YYYY HH:MI:SS:mmmAM |
| 10 | USA | MM-DD-YY |
| 11 | JAPAN | YY/MM/DD |
| 12 | ISO | YYMMDD |
| 13 | Europe + ms | DD Mon YYYY HH:MI:SS:mmm (24h) |
| 14 | - | HH:MI:SS:mmm (24h) |
代碼 +100 顯示四位數年份 (如 111 → 2011)。
-- 回傳整數
SELECT DATEPART(mm, entrydate) AS MonthPosted FROM site_directory; -- 2,5,5
-- 回傳字串
SELECT DATENAME(mm, entrydate) AS MonthPosted FROM site_directory; -- February, June, June
-- 合併星期與月份
SELECT DATENAME(dw, entrydate) + '-' + DATENAME(mm, entrydate)
FROM site_directory; -- Friday-February, Tuesday-June, Monday-June
日期部分縮寫:yy年, qq季, mm月, dy年日, dd日, wk周, dw星期, hh時, mi分, ss秒, ms毫秒。
錯誤:WHERE entrydate = '12/25/2000' → 只匹配午夜 00:00:00.000。
原因:SQL Server 補齊缺省時間 12:00:00:000AM 或缺省日期 Jan 1 1900。
正確寫法一:範圍比較
WHERE entrydate >= '12/25/2000' AND entrydate < '12/26/2000'
正確寫法二:LIKE 配合通配符
WHERE entrydate LIKE 'Dec 25 2000%'
需注意 LIKE 依字串表示比對,秒/毫秒級需先 CONVERT 至高精度格式。
-- 計算距現在幾小時
SELECT entrydate AS TimeEntered,
DATEDIFF(hh, entrydate, GETDATE()) AS HoursAgo
FROM weblog;
-- 計算截止日期 (一個月後)
SELECT username,
DATEADD(mm, 1, firstvisit_date) AS RegistrationExpires
FROM registration_table;
DATEDIFF 參數:日期部分、起始時間、結束時間 (早者在前得正數)。DATEADD 參數:日期部分、間隔數值、基準日期。注意:DATEADD(mm,1,...) 僅月份 +1,不加 30 天。