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

DB2 與 Oracle 常用函數對照表:型別轉換、日期時間、字串、數學函數

     編輯:DB2 教學

前言

異構資料庫遷移時,函數對照是關鍵工作之一。本文整理 DB2 與 Oracle 在型別轉換、日期時間、字串操作、數學運算四大類常用函數的對應關係,並提供實際 SQL 範例,加速遷移驗證。

一、型別轉換函數

功能OracleDB2
數值/日期轉字串TO_CHAR(expr, fmt)CHAR(expr) 或 VARCHAR(expr)
字串轉日期TO_DATE(str, fmt)DATE(str)、TIMESTAMP(str)
字串轉數值TO_NUMBER(str, fmt)DECIMAL(str)、INTEGER(str)
十六進位轉換RAWTOHEXHEX(arg)

範例:數值轉字串

-- Oracle
SELECT TO_CHAR(15.5000) FROM DUAL;

-- DB2
SELECT CHAR(15.5000) FROM SYSIBM.SYSDUMMY1;

範例:字串轉日期

-- Oracle
SELECT TO_DATE('2008-01-01', 'YYYY-MM-DD') FROM DUAL;

-- DB2
SELECT DATE('2008-01-01') FROM SYSIBM.SYSDUMMY1;

二、日期時間函數

DB2 提供豐富的日期時間擷取函數,Oracle 則多用 EXTRACT 或 TO_CHAR 達到同樣目的。

功能DB2 函數Oracle 寫法
年份YEAR(date)EXTRACT(YEAR FROM date)
季度QUARTER(date)TO_CHAR(date, 'Q')
月份MONTH(date)EXTRACT(MONTH FROM date)
星期幾(數字)DAYOFWEEK(date)TO_CHAR(date, 'D')
年度第幾天DAYOFYEAR(date)TO_CHAR(date, 'DDD')
日期轉整數(從 0001-01-01 起算)DAYS(date)date - DATE '0001-01-01'
午夜至今秒數MIDNIGHT_SECONDS(time)(date - TRUNC(date)) * 86400
月份名稱MONTHNAME(date)TO_CHAR(date, 'MONTH')
星期名稱DAYNAME(date)TO_CHAR(date, 'DAY')

常用日期運算對照

操作OracleDB2
目前日期時間SYSDATECURRENT DATE / CURRENT TIMESTAMP
日期加 1 天SYSDATE + INTERVAL '1' DAYCURRENT DATE + 1 DAY
日期相減得天數DATE1 - DATE2DAYS(DATE1) - DAYS(DATE2) 或 DATE1 - DATE2 返回標籤

三、字串函數對照

功能DB2Oracle
長度LENGTH(str)LENGTH(str) / LENGTHB(str)
轉小寫LOWER(str) / LCASE(str)LOWER(str)
轉大寫UPPER(str) / UCASE(str)UPPER(str)
左修剪空白LTRIM(str)LTRIM(str) / TRIM(LEADING FROM str)
右修剪空白RTRIM(str)RTRIM(str) / TRIM(TRAILING FROM str)
兩側修剪空白LTRIM(RTRIM(str))TRIM(str)
空值處理COALESCE(a, b)NVL(a, b) / COALESCE(a, b)
串接CONCAT(a, b) / a || bCONCAT(a, b) / a || b
插入/取代INSERT(src, pos, len, ins)無直接對應,需組合 SUBSTR
查找位置LOCATE(find, in [, start]) / POSSTR(in, find)INSTR(in, find [, start])
左擷取LEFT(str, len)SUBSTR(str, 1, len)
右擷取RIGHT(str, len)SUBSTR(str, -len)
重複REPEAT(str, n)RPAD(str, LENGTH(str)*n, str) 技巧實現
替換REPLACE(src, old, new)REPLACE(src, old, new)
空白字串SPACE(n)RPAD(' ', n)
子字串SUBSTR(str, pos [, len])SUBSTR(str, pos [, len])

四、數學函數對照

功能DB2Oracle
絕對值ABS(n)ABS(n)
無條件進位CEIL(n) / CEILING(n)CEIL(n)
無條件捨去FLOOR(n)FLOOR(n)
餘數MOD(n1, n2)MOD(n1, n2)
隨機數RAND() (0~1)DBMS_RANDOM.VALUE
冪次方POWER(n1, n2)POWER(n1, n2)
四捨五入ROUND(n1 [, n2])ROUND(n1 [, n2])
符號SIGN(n)SIGN(n)
截斷TRUNCATE(n1 [, n2]) / TRUNC(n1 [, n2])TRUNC(n1 [, n2])
彙總函數COUNT, SUM, AVG, MAX, MINCOUNT, SUM, AVG, MAX, MIN

遷移提醒

  • DB2 日期運算支援 + 1 DAY、- 2 MONTHS 等標準間隔語法,比 Oracle 的 INTERVAL 更直觀。
  • 字串查找注意 LOCATE 與 POSSTR 參數順序相反,遷移時易出錯。
  • DB2 無 NVL,統一用 COALESCE。
  • 隨機數、十六進位轉換等進階函數語法差異大,需實測驗證。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved