8

こんにちは、SQLで正と負の値をチェックするためにデコードを使用する方法はありますか?

例えば

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

ロジックがifelseステートメントでコーディングされている場合、次のようになります。

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

ありがとうございました。

4

8 に答える 8

10

デコードで「署名」を使用できます。Sign は、負の場合は -1、0 の場合は 0、正の場合は 1 を返します。

select decode(sign(money_return), -1, abs(money_return), 
                                   1, money_return*10, 
                                   money_return) 
from cash_t;
于 2013-04-24T21:43:01.587 に答える
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;
于 2012-12-26T07:25:11.670 に答える
2

SIGN() を使用します。0 の場合は「0」、正の場合は「1」、負の値の場合は「-1」を返します。

SELECT
    DECODE(
        SIGN(money_return),
        0,
        money_return,
        1,
        money_return * 10,
        - 1,
        ABS(money_return)
    )
FROM
    CASH_T;
于 2017-02-21T17:50:03.800 に答える
1

このように使用できます、

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

上記のdecodeステートメントは、次の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;
于 2012-12-26T07:29:07.607 に答える
1

正の値または負の値が見つかった関数「最大」および「最小」を使用します。

例。

デュアルからdecode(greatest(value,0), 0,'Negative','Positive')を選択

また

デュアルから decode(least(value,0), 0,'Positive','Negative') を選択します

感謝

于 2016-08-23T05:00:51.547 に答える
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;
于 2012-12-26T07:27:54.637 に答える
0

それが使用する唯一の式である場合は、次のようにすることができます。

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

結果を確認するSQLFiddle 。

さて、これは非常に壊れやすく、シナリオが変更された場合は機能しません。

于 2012-12-26T07:29:24.483 に答える