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

MySQL 與 Oracle 函數對照表:遷移開發必備速查手冊

     編輯:MySQL 綜合教學

概覽

本文整理 MySQL 5.6/5.7 與 Oracle 11g/12c 常用函數的對應關係,涵蓋數值、字串、日期、轉換、流程控制等類別,助力異構資料庫遷移與跨平台 SQL 撰寫。

1. 數值函數

功能OracleMySQL備註
四捨五入ROUND(n, m)ROUND(n, m)語法相同
絕對值ABS(n)ABS(n)語法相同
向上取整CEIL(n)CEILING(n)函數名不同
向下取整FLOOR(n)FLOOR(n)語法相同
最大/最小值MAX(expr)/MIN(expr)MAX(expr)/MIN(expr)聚合函數相同
截斷數值TRUNC(n, m)TRUNCATE(n, m) 或 CAST(n AS SIGNED)MySQL 無 TRUNC,用 TRUNCATE 或 CAST

2. 字串函數

功能OracleMySQL備註
字符 ASCII 碼ASCII(str)ASCII(str)相同
碼值轉字符CHR(n)CHAR(n)函數名不同
字串替換REPLACE(str, from, to)REPLACE(str, from, to)相同
子串位置INSTR(str, substr, pos, occ)INSTR(str, substr) / LOCATE(substr, str)Oracle 支援起始位置/出現次數;MySQL LOCATE 參數順序相反
子串截取SUBSTR(str, pos, len)SUBSTRING(str, pos, len) / SUBSTR(str, pos, len)MySQL 兩者皆可
字串長度 (字符數)LENGTH(str) *按字節*CHAR_LENGTH(str) / CHARACTER_LENGTH(str)Oracle LENGTH 視字符集而定;MySQL 用 CHAR_LENGTH 計字符數
左填充LPAD(str, len, pad)LPAD(str, len, pad)相同
大小寫轉換UPPER/LOWERUPPER/LOWER相同
去除空格TRIM / LTRIM / RTRIMTRIM / LTRIM / RTRIM相同
字串連接CONCAT(s1, s2) 或 s1 \|\| s2CONCAT(s1, s2, ...)MySQL 不支援 \|\| (視為 OR),需用 CONCAT

3. 日期時間函數

功能OracleMySQL備註
當前日期時間SYSDATENOW() / SYSDATE()MySQL NOW() 為語句執行時刻,SYSDATE() 為函數執行時刻
日期格式化TO_CHAR(dt, 'fmt')DATE_FORMAT(dt, 'fmt')格式字元不同:YYYY→%Y, MM→%m, DD→%d, HH24→%H, MI→%i, SS→%s
字串轉日期TO_DATE(str, 'fmt')STR_TO_DATE(str, 'fmt')格式字元同上
日期加減月ADD_MONTHS(dt, n)DATE_ADD(dt, INTERVAL n MONTH)MySQL INTERVAL 語法靈活支援 YEAR/DAY/HOUR 等
下一個指定星期NEXT_DAY(dt, weekday)無內建,需自定義函數MySQL 需自行實現
兩日期差天數dt1 - dt2 (結果含小數)DATEDIFF(dt1, dt2) (整數天數)Oracle 直接相減;MySQL 用 DATEDIFF
日期截斷TRUNC(dt, 'fmt')DATE(dt) / DATE_FORMAT...MySQL 無直接對應

4. 流程控制 / 空值處理

功能OracleMySQL備註
空值替換 (顯示)NVL(expr1, expr2)IFNULL(expr1, expr2) / COALESCE(expr1, expr2)COALESCE 為標準 SQL,支援多參數,推薦使用
空值判斷 (布林)無直接函數ISNULL(expr) → 1/0MySQL 特有
多條件分支DECODE(expr, v1, r1, v2, r2, ..., def)CASE WHEN ... THEN ... ELSE ... END / IF(cond, t, f)DECODE 為 Oracle 專有;MySQL 用標準 CASE 或 IF()
條件判斷CASE WHEN ...CASE WHEN ... / IF(cond, t, f)IF() 為 MySQL 擴展,返回數值或字串

5. 類型轉換

功能OracleMySQL備註
轉字串TO_CHAR(n/dt, 'fmt')CAST(expr AS CHAR) / CONCAT(expr, '')MySQL 隱式轉換較強,常無需顯式轉換
轉數值TO_NUMBER(str)CAST(str AS SIGNED) / CAST(str AS DECIMAL)SIGNED 為帶符號整數
轉日期TO_DATE(str, 'fmt')STR_TO_DATE(str, 'fmt')同上
字符集轉換CONVERT(str, dest_charset, src_charset)CONVERT(str USING charset)語法不同

6. 序列 / 自增主鍵

功能OracleMySQL
取得下一值SEQ_NAME.NEXTVALAUTO_INCREMENT 欄位,插入後 LAST_INSERT_ID() 取得
當前值SEQ_NAME.CURRVALLAST_INSERT_ID() (會話級)

7. 聚合 / 統計

功能OracleMySQL
SUM / AVG / COUNT相同相同
標準差 / 變異數STDDEV / VARIANCESTDDEV / VARIANCE (MySQL 5.7+)

8. 系統 / 錯誤處理 (PL/SQL vs Stored Program)

功能OracleMySQL
錯誤代碼SQLCODE無對應,Java 中用 SQLException.getErrorCode()
錯誤訊息SQLERRM無對應,Java 中用 SQLException.getMessage()
控制台輸出DBMS_OUTPUT.PUT_LINE無對應,存儲過程中用 SELECT 'msg'; 或應用層日誌

遷移實戰建議

  1. 建立函數映射表:專案初期整理核心 SQL 使用的函數對照,統一封裝在工具類或 View 中。
  2. 日期格式字元轉換:集中管理格式字串常數,避免硬編碼散落。
  3. DECODE → CASE WHEN:機械轉換即可,邏輯等價。
  4. NVL → COALESCE:標準 SQL,跨資料庫相容性最佳。
  5. 字串連接:Oracle 的 \|\| 改為 CONCAT() 或應用層拼接。
  6. 測試驗證:邊界值 (NULL、空字串、最大長度、特殊字符) 必須回歸測試。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved