2012-12-26 20 views
6

Ciao c'è un modo per utilizzare la decodifica per verificare i valori positivi e negativi in ​​sql?Utilizzo della decodifica per verificare i valori positivi e negativi

ad es.

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

se la logica è codificato in if altrimenti sarà qualcosa di simile:

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 

Grazie.

risposta

6

avete bisogno della cassa dichiarazione

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; 
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; 
+0

Grazie, qual è il vantaggio di includere money_return dopo la dichiarazione CASE? – user1872384

1

È possibile utilizzare come come questo,

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

La dichiarazione di decodifica sopra è equivalente al seguente 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; 

Quindi il codice finale dovrebbe essere qualcosa di simile,

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

@rs. Sta chiedendo c'è un modo per usare la decodifica per verificare i valori positivi e negativi in ​​sql? Non è a conoscenza di DECODE, immagino. Vedi c'è una sintassi sbagliata nella sua domanda – Mari

+0

Ti spiace condividere quale parte è sbagliata per la parte di decodifica? forse errore di battitura? – user1872384

+0

@ user1872384 Non è possibile utilizzare '** <0 **' come questo nella funzione di decodifica. Lo spero. Puoi controllare e farmi sapere se funziona nel tuo ambiente – Mari

0

Se questo è l'unica formula che si utilizza, si potrebbe fare:

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

SQL Fiddle per verificare i risultati.

Ora, questo è molto, molto fragile e non funzionerà se lo scenario cambia.

+0

ok grazie sweko, preferisco ancora il metodo case. – user1872384

+1

Per favore, hai il codice 'case' in produzione. È molto più chiaro e manutenibile. – SWeko

5

È possibile utilizzare "firma" con una decodifica. Il segno restituirà -1 per ogni negativo, 0 per 0, 1 e per ogni positivo:

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

Se il valore è positivo, detrazione nelle sé restituirà 0 e verrà applicata la prima condizione . Altrimenti, è negativo e viene applicata la seconda condizione. 0 Si adatta alla prima condizione e restituisce 0 (come 0 * 10).

+0

Necessario assoluto il valore sottratto o questa equazione restituirà sempre zero. select decode (: money_return-abs (: money_return), 0,: money_return * 10, abs (: money_return)) da doppio; – DHough

1

Uso la funzione "maggiore" e "minimo" rilevato Valori positivi o Valore negativo.

esempio.

select decode (massimo (valore, 0), 0, 'negativo', 'Positivo') dal doppio

o

select decode (almeno (valore, 0) , 0, 'positiva', 'negativo') dal doppio

ringraziamento

1

Usa SEGNO(). Restituisce "0" per 0, "1" per positivo e "-1" per valori negativi.

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