2014-12-15 4 views
6

Ich verwende H2 (mit MySQL-Kompatibilitätsmodus), um einige automatisierte Tests gegen unsere Software zu schreiben, die MySQL verwendet. Leider scheint H2 die IF Funktion, die viele unserer Abfragen verwenden, nicht zu haben. Wenn Sie unsere Anwendungsabfragen mit etwas wie DECODE nicht umschreiben, ist das eine gute Möglichkeit, die if-Funktion zu erstellen, etwa als Alias?IF-Funktion in H2 für MySQL-Kompatibilität

Der Fehler, ich bin immer:

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

Antwort

3

Ended Abfragen Umschreiben nur auf Funktionen mit beiden Datenbank kompatibel zu verwenden - H2, MySql. In meinem Fall wurden die fraglichen Funktionen durch IFNULL ersetzt.

+2

'CASEWHEN' ist eine andere Alternative, denke ich. – px5x2

+0

CASEWHEN ist der richtige, danke! –

1

Ja können Sie die Funktion, wenn als Alias ​​erstellen:

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

Danke, das funktioniert für Strings. Ich brauche jedoch eine IF für Strings und Nummer. Ich habe dafür eine neue Frage geschrieben: http://stackoverflow.com/questions/37595970/create-alias-which-works-for-strings-and-numbers-in-h2 –

2

Ich habe gerade das gleiche Problem, und ich beschlossen, es mit CASE/WHEN/THEN SQL-Anweisung. So können Sie Ihre Abfrage wie folgt umschreiben:

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

Sicherlich ist es ausführlicher, aber es passt sowohl H2 und MySQL.