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

Oracle 遷移 SQL Server 必踩陷阱:DUAL、連接、截斷、轉換、長度函數

     編輯:Oracle 資料庫相關知識

1. DUAL 偽表差異

Oracle 查詢常用 SELECT 'x' FROM dual 取得常數;SQL Server 直接 SELECT 'x' 即可,無需 FROM 子句。

2. 字串連接運算子

OracleSQL Server
||+
-- Oracle
SELECT 'Name' || 'Last' FROM t;
-- SQL Server
SELECT 'Name' + 'Last';

3. 數字截斷 TRUNC vs ROUND/FLOOR

Oracle TRUNC(15.79, 1) → 15.7 (保留 1 位小數)。
SQL Server 無直對應函數,組合使用:

SELECT ROUND(15.79, 1, 1);  -- 第 3 參數 1 表示截斷
SELECT FLOOR(15.79 * 10) / 10.0;

4. 數字轉字串 TO_CHAR vs STR/CAST

-- Oracle
TO_CHAR(123.45, '999999.99')
TO_CHAR(expiry_date, 'DDMONYYYY')

-- SQL Server
STR(123.45, 14, 2)          -- 總長 14、小數 2 位
CAST(REPLACE(CONVERT(VARCHAR(12), expiry_date, 106), ' ', '') AS VARCHAR(9))

5. 字串長度 LENGTH vs LEN/DATALENGTH

  • Oracle LENGTH:字元數,NULL 回傳 NULL。
  • SQL Server LEN:字元數,忽略尾隨空格,NULL 回傳 NULL。
  • SQL Server DATALENGTH:位元組數,含尾隨空格,NULL 回傳 NULL。

遷移檢查清單

  • 所有 || → +;DUAL 移除。
  • TRUNC(num, n) → ROUND(num, n, 1)。
  • TO_CHAR 格式模板 → CONVERT style 代碼 / FORMAT (2012+)。
  • SYSDATE → GETDATE();NVL → ISNULL/COALESCE。
  • 日期運算 date + n → DATEADD(day, n, date)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved