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

Oracle 轉 SQL Server 遷移:數字截斷函數 TRUNC 對應 ROUND/FLOOR

     編輯:Oracle 資料庫基礎

前言

Oracle TRUNC(number, decimals) 可直接截斷數字至指定小數位 (或負數截斷整數位),SQL Server 無同名函數,需組合 ROUND 與 FLOOR 達成相同效果。

函數對照與範例

Oracle結果SQL Server 等效寫法說明
TRUNC(15.79, 1)15.7ROUND(15.79, 1, 1)ROUND 第 3 參數 = 1 表示截斷而非四捨五入 (2008+)
TRUNC(15.79, 0)15ROUND(15.79, 0, 1) 或 FLOOR(15.79)FLOOR 向下取整 (負數會更小,如 -1.2 → -2)
TRUNC(-15.79, 1)-15.7ROUND(-15.79, 1, 1)ROUND 截斷模式對正負數同向截斷
TRUNC(1579, -2)1500ROUND(1579, -2, 1)負數 decimals 截斷整數位

SQL Server 實作細節


-- 1. ROUND 截斷模式 (第 3 參數 function = 1)
SELECT ROUND(15.79, 1, 1) AS trunc_1_decimal;  -- 15.7
SELECT ROUND(15.79, 0, 1) AS trunc_integer;    -- 15

-- 2. FLOOR 僅適用正數截斷至整數
SELECT FLOOR(15.79);  -- 15
SELECT FLOOR(-15.79); -- -16 (注意:向下取整,非向零截斷)

-- 3. 通用自訂函數 (相容舊版 SQL Server)
CREATE FUNCTION dbo.TRUNC_NUM (@val FLOAT, @dec INT)
RETURNS FLOAT
AS BEGIN
  DECLARE @factor FLOAT = POWER(10, @dec);
  RETURN CASE WHEN @val >= 0 THEN FLOOR(@val * @factor) / @factor
              ELSE CEILING(@val * @factor) / @factor END; -- 向零截斷
END;

遷移注意事項

  • Oracle TRUNC 對負數**向零截斷** (-15.79 → -15.7);SQL Server FLOOR **向下取整** (-15.79 → -16),語義不同,**務必用 ROUND(..., 1) 或自訂函數**。
  • ROUND 第 3 參數需 SQL Server 2008 以上;舊版必須用自訂函數或 CAST(FLOOR(val * 10) / 10 AS DECIMAL(10,1)) 變通。
  • 資料型別:Oracle NUMBER 精度 38 位;SQL Server DECIMAL(38,10) 等固定精度,遷移時確認精度足夠。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved