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

SQL Server 與 Oracle 常用函數對照表:數學、字符、日期、轉換、空值處理

     編輯:關於SqlServer

跨平台開發/遷移時,函數語法差異是主要阻力點。本文整理數學、字符串、日期、轉換、空值、聚合六大類 50+ 高頻函數對照,採用「SQL Server 語法 → Oracle 語法」雙欄對比,可直接作為遷移速查手冊。

數學函數

功能SQL ServerOracle
絕對值ABS(-1)ABS(-1) FROM DUAL
向上取整CEILING(-1.001)CEIL(-1.001) FROM DUAL
向下取整FLOOR(-1.001)FLOOR(-1.001) FROM DUAL
截取整數CAST(-1.002 AS INT)TRUNC(-1.002) FROM DUAL
四捨五入ROUND(1.23456, 4)ROUND(1.23456, 4) FROM DUAL
e^xEXP(1)EXP(1) FROM DUAL
自然對數LOG(2.718...)LN(2.718...) FROM DUAL
以 10 為底對數LOG10(10)LOG(10,10) FROM DUAL
平方SQUARE(4)POWER(4,2) FROM DUAL
平方根SQRT(4)SQRT(4) FROM DUAL
任意次冪POWER(3,4)POWER(3,4) FROM DUAL
隨機數RAND()DBMS_RANDOM.VALUE(0,1) FROM DUAL
符號SIGN(-8)SIGN(-8) FROM DUAL
圓周率PI()無內建 (自定義 ACOS(-1))
三角函數SIN/COS/TAN (弧度)SIN/COS/TAN (弧度) FROM DUAL
反三角ASIN/ACOS/ATAN/ATN2ASIN/ACOS/ATAN/ATAN2 FROM DUAL
弧度↔角度DEGREES/RADIANS無內建 (自定義 *180/PI())

聚合比較函數

功能SQL ServerOracle
最大值 (標量列表)MAX(v) FROM (VALUES...)GREATEST(1,-2,4,3) FROM DUAL
最小值 (標量列表)MIN(v) FROM (VALUES...)LEAST(1,-2,4,3) FROM DUAL

空值處理

功能SQL ServerOracle
NULL 替換ISNULL(col, default)NVL(col, default) / COALESCE(col, default)
多參數首個非空COALESCE(a,b,c)COALESCE(a,b,c)

字符串函數

功能SQL ServerOracle
字符→ASCIIASCII('a')ASCII('a') FROM DUAL
ASCII→字符CHAR(97)CHR(97) FROM DUAL
連接'11'+'22'+'33' / CONCAT('11','22')CONCAT('11','22') / '11'||'22'||'33'
子串位置CHARINDEX('s','sdsq',2)INSTR('sdsq','s',2) FROM DUAL
模糊位置PATINDEX('%d%q%','sdsfasdqe')REGEXP_INSTR(str, 'd.*q') (10g+)
子串提取SUBSTRING('abcd',2,2)SUBSTR('abcd',2,2) FROM DUAL
子串替換 (指定位置/長度)STUFF('abcdef',2,3,'ijklmn')REPLACE('abcdef','bcd','ijklmn') (語義不同)
全局替換REPLACE(str,old,new)REPLACE(str,old,new) / TRANSLATE(str,'ab','cd') (字符級映射)
長度LEN / DATALENGTHLENGTH / LENGTHB
大小寫LOWER / UPPERLOWER / UPPER / INITCAP (首字母大寫)
左填充SPACE(10)+'abcd' / RIGHT(REPLICATE(' ',10)+'abcd',14)LPAD('abcd',14) FROM DUAL
右填充'abcd'+SPACE(10)RPAD('abcd',14) FROM DUAL
去空格LTRIM / RTRIMLTRIM / RTRIM / TRIM
重複字符REPLICATE('x',5)RPAD('x',5,'x') / LPAD('x',5,'x')

日期時間函數

功能SQL ServerOracle
當前日期時間GETDATE() / SYSDATETIME()SYSDATE / SYSTIMESTAMP / CURRENT_TIMESTAMP
日期加減DATEADD(DAY, 10, GETDATE())SYSDATE + 10 / ADD_MONTHS(SYSDATE, 1)
日期差DATEDIFF(DAY, d1, d2)d2 - d1 (數值) / MONTHS_BETWEEN(d2,d1)
日期部分提取YEAR/ MONTH/ DAY/ DATEPARTEXTRACT(YEAR FROM d) / TO_CHAR(d,'YYYY')
日期構造DATEFROMPARTS(y,m,d) (2012+)TO_DATE('2024-01-15','YYYY-MM-DD')
格式化輸出FORMAT(d,'yyyy-MM-dd') (2012+) / CONVERTTO_CHAR(d,'YYYY-MM-DD')
字符串轉日期CAST/CONVERT/PARSETO_DATE(str,'fmt') / TO_TIMESTAMP
月末日期EOMONTH(d) (2012+)LAST_DAY(d)

類型轉換

功能SQL ServerOracle
顯式轉換CAST(expr AS TYPE) / CONVERT(TYPE, expr, style)CAST(expr AS TYPE) / TO_CHAR/TO_NUMBER/TO_DATE
隱式轉換較寬鬆嚴格 (建議顯式轉換)

遷移關鍵提示

  1. DUAL:Oracle 單行查詢必須 FROM DUAL,SQL Server 可省略。
  2. ISNULL 只接受 2 參數,COALESCE 多參數通用,遷移統一用 COALESCE。
  3. 字符連接:SQL Server + 遇 NULL 結果為 NULL;Oracle || 遇 NULL 視為空串。遷移用 CONCAT 或 COALESCE 統一語義。
  4. 日期運算:SQL Server DATEADD/DATEDIFF 粒度靈活;Oracle 直接數值加減 (天)、ADD_MONTHS (月)、INTERVAL (標準)。
  5. GETDATE() 非確定性函數,索引視圖/計算列不可用;Oracle SYSDATE 同理。

收藏此表,遷移項目中遇到函數差異即查即用,大幅減少語法錯誤與語義偏差。

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