首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL DATE 型別完整指南:格式標準、寬鬆輸入、比較規則、特殊 0 日期、ODBC 相容

     編輯:MySQL 資料庫相關知識

MySQL DATE 型別標準格式 'YYYY-MM-DD',但支援寬鬆輸入與隱含轉換。本文說明格式規則、寬鬆比較、例外情況、'0000-00-00' 特殊值、ODBC 相容、多種合法插入格式範例。

標準格式

'YYYY-MM-DD'  -- 如 '2024-01-15'

標準 SQL 要求**僅此格式**,MySQL 延伸支援更多。

寬鬆輸入格式(自動轉換)

以下皆合法插入 DATE 欄位:

INSERT INTO t (dt) VALUES (19970505);      -- 數字
INSERT INTO t (dt) VALUES ('19970505');    -- 無分隔符
INSERT INTO t (dt) VALUES ('97-05-05');    -- 兩位年
INSERT INTO t (dt) VALUES ('1997.05.05');  -- 點分隔
INSERT INTO t (dt) VALUES ('1997 05 05');  -- 空格分隔
INSERT INTO t (dt) VALUES ('0000-00-00');  -- 零日期

比較規則:隱含轉換為長整數

使用 <, <=, =, >=, >, BETWEEN 比較 DATE/TIME/DATETIME/TIMESTAMP 與常數字串時:

  • MySQL 將字串轉內部長整數 → 快速比較
  • 同時進行寬鬆字串檢查

例外:不轉長整數,改字串比較

情況比較方式
比較兩個欄位字串比較
欄位與運算式比較字串比較
使用 IN / STRCMP()字串比較

特殊零日期 '0000-00-00'

  • 可儲存、查詢、顯示
  • MyODBC 2.50.12+ 自動轉為 NULL(ODBC 無法處理)
  • 建議避免使用,改用 NULL

合法查詢範例

SELECT dt FROM t WHERE dt >= '1997-05-05';
SELECT dt FROM t WHERE dt >= 19970505;
SELECT MOD(dt, 100) FROM t WHERE dt >= 19970505;
SELECT dt FROM t WHERE dt >= '19970505';

實務建議

  • ✅ 應用層**統一輸出標準格式** 'YYYY-MM-DD'
  • ✅ 查詢條件**明確 CAST**:WHERE dt >= CAST('2024-01-01' AS DATE)
  • ✅ 避免依賴隱含轉換,防止跨版本/模式行為差異
  • ✅ 零日期改用 NULL,應用層統一處理
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved