您有没有办法使用解码来检查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
谢谢。
答案 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)。