使用decode来检查负值和正值

时间:2012-12-26 07:23:12

标签: sql

您有没有办法使用解码来检查sql中的正值和负值?

e.g。

select decode(money_return, **<0**, abs(money_return), **>0**, 
money_return*10, money_return) from cash_t;

如果逻辑在if else语句中编码,它将是这样的:

if(money_return<0){money_reutrn = abs(money_return);}
else if(money_return>0){money_reutrn = money_return*10;}
else {money_return = money_return;}
end

谢谢。

8 个答案:

答案 0 :(得分:7)

您需要案例陈述

select CASE 
 WHEN money_return < 0 THEN abs(money_return)
 WHEN money_return > 0 THEN money_return*10
 ELSE money_return END money_return from cash_t;

答案 1 :(得分:5)

您可以在解码时使用'sign'。对于任何负数,该符号将返回-1,对于0,将返回0,对于任何正数,该符号将返回1:

SELECT
    decode(
        sign(money_return),
        - 1,
        abs(money_return),
        1,
        money_return * 10,
        money_return
    )
FROM
    cash_t;

答案 2 :(得分:1)

您可以像这样使用

SELECT supplier_name,
decode(supplier_id, 10000, 'IBM',
                    10001, 'Microsoft',
                    10002, 'Hewlett Packard',
                    'Gateway') result
FROM suppliers;

上述解码语句等同于以下IF-THEN-ELSE语句:

IF supplier_id = 10000 THEN
   result := 'IBM';

ELSIF supplier_id = 10001 THEN
   result := 'Microsoft';

ELSIF supplier_id = 10002 THEN
   result := 'Hewlett Packard';

ELSE
   result := 'Gateway';

END IF;

所以你的最终代码应该是这样的,

select decode(money_return, money_return<0, abs(money_return),
                            money_return>0, money_return*10,
                                            money_return) result
from cash_t;

答案 3 :(得分:1)

我使用功能&#34;最伟大的&#34;和#34;至少&#34;发现正值或负值。

例如

  

从双重选择解码(最大(值,0),0,&#39;否定&#39;,&#39;正面&#39;)

  

从双重

中选择解码(最少(值,0),0,&#39;正面&#39;负面&#39;)

感谢

答案 4 :(得分:1)

使用SIGN()。它返回&#34; 0&#34;为0,&#34; 1&#34;为积极和&#34; -1&#34;负值。

SELECT
    DECODE(
        SIGN(money_return),
        0,
        money_return,
        1,
        money_return * 10,
        - 1,
        ABS(money_return)
    )
FROM
    CASH_T;

答案 5 :(得分:0)

select CASE money_return  
  WHEN money_return < 0 THEN abs(money_return) 
  WHEN money_return > 0 THEN money_return*10
  ELSE money_return END money_return from cash_t;

答案 6 :(得分:0)

如果这是你使用的唯一公式,你可以这样做:

select (11 *abs(money_return) + 9 *money_return)/2 as money_return
from cash_t

SQL Fiddle检查结果。

现在,这非常非常脆弱,如果方案发生变化,将无法工作。

答案 7 :(得分:0)

SELECT
    decode(
        money_return - Abs(money_return),
        0,
        money_return * 10,
        abs(money_return)
    )
FROM
    cash_t;

如果值为正,则从自身中扣除它将返回0并且将应用第一个条件。否则,它是负面的,并且应用第二个条件。 0适合第一个条件并返回0(0 * 10)。