2014-12-15 8 views
6

Sto utilizzando H2 (con la modalità di compatibilità MySQL) per scrivere alcuni test automatici contro il nostro software che utilizza MySQL. Sfortunatamente, sembra che H2 non abbia la funzione IF usata da molte delle nostre query. A meno di riscrivere le nostre domande di applicazione con qualcosa come DECODE, è un buon modo per creare la funzione if, ad esempio come un alias?Funzione IF in H2 per compatibilità con MySQL

L'errore che sto ricevendo:

WARNING: Failed to execute: SELECT IF(true,'TRUE!!','FALSE!!!') because: Function "IF" not found; SQL statement: 

risposta

3

finito per riscrivere le query da utilizzare funzioni compatibili sia con banca dati - H2, MySql. Nel mio caso, le funzioni in questione sono state sostituite con IFNULL.

+2

'CASEWHEN' è un'altra alternativa che penso. – px5x2

+0

CASEWHEN è quello giusto, grazie! –

1

Sì, è possibile creare la funzione di se come un alias:

CREATE ALIAS IF NOT EXISTS `IF` AS $$ 
    String ifFunction(boolean condition, String exp1, String exp2){ 
     if(condition) { 
      return exp1; 
     } else { 
      return exp2; 
     } 
    } 
$$; 
+0

Grazie, questo funziona per le stringhe. Ho bisogno di un IF per archi e numeri, però. Ho scritto una nuova domanda per questo: http://stackoverflow.com/questions/37595970/create-alias-which-works-for-strings-and-numbers-in-h2 –

2

Ho appena avuto lo stesso problema e ho risolto con CASE/WHEN/THEN istruzione SQL. Così si può riscrivere la query come segue:

SELECT CASE WHEN true THEN 'TRUE!!' ELSE 'FALSE!!!' END; 

Sicuramente è più prolisso, ma si adatta sia H2 e MySQL.