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

主流資料庫當前日期/時間函數對照表:Oracle、DB2、MySQL、SQL Server 等

     編輯:DB2 教學

標準 SQL vs 廠商擴展

SQL:2003 標準定義 CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP,但各廠商實作與擴展函數差異極大,跨平台遷移時須特別注意。

快速對照表

資料庫日期+時間僅日期僅時間備註
OracleSYSDATE / SYSTIMESTAMPTRUNC(SYSDATE)TO_CHAR(SYSDATE,'HH24:MI:SS')需 FROM DUAL;SYSTIMESTAMP 含時區/毫秒
DB2CURRENT TIMESTAMPCURRENT DATECURRENT TIME標準 SQL,FROM SYSIBM.SYSDUMMY1 可省略
MySQLNOW() / SYSDATE()CURDATE() / CURRENT_DATECURTIME() / CURRENT_TIMENOW() 語句開始固定;SYSDATE() 即時動態
SQL ServerGETDATE() / SYSDATETIME()CAST(GETDATE() AS DATE)CAST(GETDATE() AS TIME)2008+ 支援 SYSDATETIME() 高精度
PostgreSQLNOW() / CURRENT_TIMESTAMPCURRENT_DATECURRENT_TIME完整支援標準 SQL
InformixCURRENT YEAR TO FRACTION(5)TODAYCURRENT HOUR TO SECOND精度可調
Sybase ASEGETDATE()CONVERT(DATE,GETDATE())CONVERT(TIME,GETDATE())
SQLiteDATETIME('now')DATE('now')TIME('now')字串函數風格
TeradataCURRENT_TIMESTAMPCURRENT_DATECURRENT_TIME標準 SQL
FoxPro/dBaseDATETIME()DATE()TIME()無 FROM 子句

關鍵差異陷阱

  • 時區處理:Oracle SYSTIMESTAMP / PostgreSQL NOW() AT TIME ZONE / MySQL CONVERT_TZ();DB2 需配合 TIMEZONE 登錄變數。
  • SYSDATE vs SYSTIMESTAMP (Oracle):前者精度至秒、後者至毫秒+時區,遷移時勿混用。
  • NOW() vs SYSDATE() (MySQL):NOW() 在同一語句多次調用返回相同值;SYSDATE() 即時讀取,複制/觸發器中行為不同。
  • 隱含轉換:SQL Server GETDATE() 直接參與字串拼接會隱含轉換,建議顯式 CONVERT/FORMAT。

跨平台寫法建議


-- 標準 SQL(最可移植)
SELECT CURRENT_TIMESTAMP FROM sysibm.sysdummy1;  -- DB2
SELECT CURRENT_TIMESTAMP;                         -- PostgreSQL, Teradata, Firebird

-- 應用層統一:由應用程式產生時間戳寫入,避免資料庫函數差異
-- 或建立統一 VIEW/函數封裝:
-- CREATE VIEW v_now AS SELECT CURRENT_TIMESTAMP AS now_ts FROM sysibm.sysdummy1;

補充:DB2 日期時間運算範例


CURRENT DATE + 7 DAYS
CURRENT TIMESTAMP - 3 HOURS
DATE('2024-01-15') + 1 MONTH
TIMESTAMPDIFF(4, CHAR(TIMESTAMP_2 - TIMESTAMP_1))  -- 回傳分鐘差
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved