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 → 返回 1
  • 0 = 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