2012-11-05 11 views
17

私は、MySQLの関数COALESCE()と比較している2つのフィールドを持っています。たとえば、COALESCE(Field1, Field2)となります。問題は、Field1が空白でもnullでないことがあることです。空ではないので、COALESCE()はField1を選択します。その場合はField2を選択する必要があります。空白(ただしnullではない)フィールドのCOALESCE()

私はif-then-else(CASE)文をクエリに書き込むことができますが、これをチェックすることができますが、空白のフィールドにはCOALESCE()のような素敵な単純な関数がありますか?

答えて

25
SELECT IFNULL(NULLIF(Field1,''),Field2) 

フィールド1が空白の場合、それはそうでない場合は、空白またはNULLとフィールド2ではない場合IFNULLはフィールド1を返しながらNULLIFは、NULLを返します。

+4

私も同じことができますが、COALESCEは正しいですか? 'COALESCE(NULLIF(Field1、 '')、Field2)' - 速度/処理負荷の違いはありますか? –

+0

「COALESCE」対「IFNULL」に関する興味深い回答:http://stackoverflow.com/questions/4747877/mysql-ifnull-vs-coalesce-which-is-faster –

+0

@John correct http://stackoverflow.com/ a/27485689/1654265 –

6

あなたがCASE表現を使用することができます

CASE WHEN Field1 <> '' THEN Field1 ELSE Field2 END 
+0

これは私がif-then-elseの意味です。私は、クリーナー、ワンラインソリューションを探していた –

+3

今それは1行です:) –

6

私はここにパーティーに遅刻を知っているが、それでも()COALESCEを使用して、この中に行う方法があります。あなたの値がNULLか ''ならば、これはうまくいくでしょう。

Select COALESCE(NULLIF(Field1,''), Field2) 
+1

選択された答えにコメントを見る:) –

+0

まあそこに行く!それを見ていない。 – Beachhouse

関連する問題