2014-12-15 29 views
6

MySQL kullanan yazılımımıza karşı bazı otomatik testler yazmak için H2 (MySQL uyumluluk modu ile) kullanıyorum. Ne yazık ki, H2, sorgularımızın çoğunun kullandığı IF işlevine sahip değil gibi görünüyor. Uygulama sorgumuzu DECODE gibi bir şeyle yeniden yazmanın kısa bir yolu, eğer bir işlev varsa, bir diğer ad olarak söyleyebilmenin iyi bir yoludur? Ben alıyorumMySQL uyumu için H2 işlevinde IF işlevi

hatası: - H2, MySql

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

cevap

3

sadece ikisi veritabanı ile uyumlu fonksiyonlarını kullanmak sorguları yeniden sona erdi. Benim durumumda, söz konusu işlevler IFNULL ile değiştirildi.

+2

"CASEWHEN" bence başka bir alternatif. – px5x2

+0

CASEWHEN doğru olanı, teşekkürler! –

1

Evet takma ad olarak eğer işlev oluşturabilirsiniz:

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

Teşekkürler, bu dizeler için çalışır. Gerçi dizeler ve sayı için bir IF'ye ihtiyacım var. Bunun için yeni bir soru yazdım: http://stackoverflow.com/questions/37595970/create-alias-which-works-for-strings-and-numbers-in-h2 –

2

Sadece aynı sorunu yaşadım ve ben CASE/WHEN/THEN SQL deyimi ile çözüldü. daha ayrıntılı var Şüphesiz

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

ama H2 ve MySQL hem uyuyor şu şekildedir: Yani sorgu yazabilirsiniz.