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

PL/SQL 與 T-SQL 常用函數對照表:數學、字串、日期、轉換、彙總完整版

     編輯:Oracle 資料庫相關知識

為 SQL Server (T-SQL) 開發者轉型 Oracle (PL/SQL) 整理的 45+ 常用函數對照表,涵蓋數學、字串、日期、轉換、彙總、系統資訊等類別,附帶參數差異與呼叫範例。

數學函數

功能T-SQLPL/SQL備註
絕對值ABS(-1)ABS(-1)同
向上取整CEILING(-1.001)CEIL(-1.001)Oracle 縮寫
向下取整FLOOR(-1.001)FLOOR(-1.001)同
截斷取整CAST(-1.002 AS INT)TRUNC(-1.002)Oracle 專有
四捨五入ROUND(1.23456,4)ROUND(1.23456,4)同
e^NEXP(1)EXP(1)同
自然對數LOG(2.718...)LN(2.718...)名稱不同
以 10 為底對數LOG10(10)LOG(10,10)Oracle 通用 LOG(b,n)
平方SQUARE(4)POWER(4,2)Oracle 通用 POWER
平方根SQRT(4)SQRT(4)同
任意次方POWER(3,4)POWER(3,4)同
隨機數RAND()DBMS_RANDOM.VALUE(0,1)Oracle 需套件
正負號SIGN(-8)SIGN(-8)同
圓周率PI()無內建,用 ACOS(-1)
三角函數SIN/COS/TAN (弧度)SIN/COS/TAN (弧度)同
反三角函數ASIN/ACOS/ATAN/ATN2ASIN/ACOS/ATAN/ATAN2同
角度弧度轉換DEGREES/RADIANS無內建,自寫 *180/PI()

字串函數

功能T-SQLPL/SQL備註
ASCII 碼ASCII('a')ASCII('a')同
碼轉字元CHAR(97)CHR(97)名稱不同
串接'11'+'22'+'33'CONCAT('11','22')||'33'Oracle 用 || 或 CONCAT(兩參數)
子串位置CHARINDEX('s','sdsq',2)INSTR('sdsq','s',2)參數順序相反
模糊模式位置PATINDEX('%d%q%','sdsfasdqe')無直譯,用 REGEXP_INSTR (10g+)
子串擷取SUBSTRING('abcd',2,2)SUBSTR('abcd',2,2)同
子串替換STUFF('abcdef',2,3,'ijklmn')REPLACE('abcdef','bcd','ijklmn')邏輯不同
字元級替換無TRANSLATE('fasdbfasegas','fa','我')Oracle 專有
長度LEN/DATALENGTHLENGTH
大小寫LOWER/UPPERLOWER/UPPER同
首字母大寫無INITCAP('abcd dsaf')Oracle 專有
左填充SPACE(10)+'abcd'LPAD('abcd',14)
右填充'abcd'+SPACE(10)RPAD('abcd',14)
修剪空白LTRIM/RTRIMLTRIM/RTRIM/TRIMOracle 多 TRIM
重複字串REPLICATE('abcd',2)無直譯,用 RPAD 或遞迴
發音比對SOUNDEX/DIFFERENCESOUNDEXOracle 無 DIFFERENCE

日期函數

功能T-SQLPL/SQL備註
系統時間GETDATE()SYSDATEOracle 無毫秒,用 SYSTIMESTAMP
前後幾日DATEADD(DAY,n,d)d + n (直接加減數字)Oracle 極簡
日期部分CONVERT(CHAR(10),d,20)TRUNC(d) / TO_CHAR(d,'YYYY-MM-DD')
時間部分CONVERT(CHAR(8),d,108)TO_CHAR(d,'HH24:MI:SS')
日期元件提取DATEPART/DATENAMETO_CHAR(d,'fmt')Oracle 統一用 TO_CHAR
月底日期無 (2012+ EOMONTH)LAST_DAY(d)
下一星期幾無NEXT_DAY(d,'FRIDAY')
時區轉換AT TIME ZONE (2016+)NEW_TIME(d,'YDT','GMT')Oracle 專有
字串轉日期CAST('2004-09-08' AS DATETIME)TO_DATE('2004-01-05 22:09:38','YYYY-MM-DD HH24:MI:SS')
日期差(秒)DATEDIFF(SS,d1,d2)(d1-d2)*24*60*60Oracle 直接相減
日期加減DATEADD(MI,8,d)d + 8/60/24Oracle 用分數天

轉換函數

方向T-SQLPL/SQL
數值→字串CONVERT/STRTO_CHAR
字串→數值CONVERTTO_NUMBER
日期→字串CONVERTTO_CHAR
字串→日期CONVERTTO_DATE
16進制↔二進制CONVERTHEX_TO_RAW/RAW_TO_HEX

其他單列函數

功能T-SQLPL/SQL
首個非 NULLCOALESCECOALESCE / NVL / DECODE
當前序列值無CURRVAL
下一序列值無NEXTVAL
相等回 NULLNULLIFNULLIF / DECODE
登入用戶 IDSUSER_IDUID
登入用戶名SUSER_NAMEUSER
資料庫用戶 IDUSER_IDUID
資料庫用戶名USER_NAMEUSER
當前用戶CURRENT_USERCURRENT_USER
用戶環境無USERENV
連接層級無LEVEL (CONNECT BY)

彙總函數

功能T-SQLPL/SQL
平均AVGAVG
計數COUNTCOUNT
最大值MAXMAX
最小值MINMIN
標準差STDEV/STDEVPSTDDEV
加總SUMSUM
變異數VAR/VARPVARIANCE

Oracle 專有實用函數

-- EXTRACT 提取日期時間元件(ANSI 標準,Oracle 9i+ 支援)
SELECT EXTRACT(YEAR FROM SYSDATE) FROM dual;  -- 2024
SELECT EXTRACT(MONTH FROM SYSDATE) FROM dual; -- 1
SELECT EXTRACT(DAY FROM SYSDATE) FROM dual;   -- 15

函數名稱差異是表象,**參數順序、預設格式、NULL 處理、隱式轉換規則** 才是遷移踩坑重點。建立專案級「函數對照表」並寫單元測試驗證,遷移才不會出現邏輯錯誤。

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