Oracle 的 SIGN() 函數是一個數值函數,用於判斷一個數值的符號(正、負或零)。它根據輸入值返回以下三種結果之一:
- 如果輸入值 大於 0,返回 1
- 如果輸入值 等於 0,返回 0
- 如果輸入值 小於 0,返回 -1
語法
SIGN(n)
其中 n 是一個數值表達式(可以是列、常量、算術表達式等)。
詳細舉例説明
示例 1:基本用法
SELECT SIGN(10) AS pos,
SIGN(0) AS zero,
SIGN(-5) AS neg
FROM dual;
輸出結果:
|
POS
|
ZERO
|
NEG
|
|
1
|
0
|
-1
|
説明:
10 > 0→ 返回10 = 0→ 返回0-5 < 0→ 返回-1
示例 2:與表數據結合使用
假設有一張銷售表 sales,結構如下:
|
id
|
product
|
profit
|
|
1
|
A
|
100
|
|
2
|
B
|
-30
|
|
3
|
C
|
0
|
|
4
|
D
|
250
|
我們想快速知道每筆銷售是盈利(正)、虧損(負)還是持平(零):
SELECT product,
profit,
SIGN(profit) AS profit_sign
FROM sales;
輸出結果:
|
product
|
profit
|
profit_sign
|
|
A
|
100
|
1
|
|
B
|
-30
|
-1
|
|
C
|
0
|
0
|
|
D
|
250
|
1
|
你可以進一步用 CASE 語句將符號轉換為可讀文本:
SELECT product,
profit,
CASE SIGN(profit)
WHEN 1 THEN '盈利'
WHEN -1 THEN '虧損'
ELSE '持平'
END AS status
FROM sales;
輸出:
|
product
|
profit
|
status
|
|
A
|
100
|
盈利
|
|
B
|
-30
|
虧損
|
|
C
|
0
|
持平
|
|
D
|
250
|
盈利
|
注意事項
SIGN()只接受數值類型(如 NUMBER、INTEGER、DECIMAL 等),若傳入非數值類型(如字符串'abc'),會報錯。- 對於非常小的浮點數(如
0.0000001),只要大於 0,仍返回1;同理,極小的負數(如-1e-10)返回-1。