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

MSSQL DATETIME 處理完全手冊:取得、轉換、擷取、範圍查詢、比較運算與陷阱避坑

     編輯:關於SqlServer

取得目前日期時間

GETDATE()  -- 精度 3.33ms,預設顯示至秒
-- 作為欄位預設值
CREATE TABLE site_log (
    username VARCHAR(40),
    useractivity VARCHAR(100),
    entrydate DATETIME DEFAULT GETDATE()
);

格式轉換 CONVERT

SELECT CONVERT(VARCHAR(30), GETDATE(), 9);  -- 含毫秒:Nov 30 1997 3:29:55:170AM

常用樣式代碼:

代碼標準輸出範例
0DefaultMon DD YYYY HH:MIAM
1USAMM/DD/YY
3British/FrenchDD/MM/YY
8-HH:MI:SS
9Default + msMon DD YYYY HH:MI:SS:mmmAM
10USAMM-DD-YY
11JAPANYY/MM/DD
12ISOYYMMDD
13Europe + msDD Mon YYYY HH:MI:SS:mmm (24h)
14-HH:MI:SS:mmm (24h)

代碼 +100 顯示四位數年份 (如 111 → 2011)。

擷取日期部分 DATEPART / DATENAME

-- 回傳整數
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 天。

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