2016-03-31 12 views
1

を選択した場合:expr1とTRUEあるMySQLでのステートメントは、作品は次のように場合<a href="http://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html#function_if" rel="nofollow">docs</a> Aに従って

IF(expr1のexpr2のexpr3は

場合expr1 <>0およびexpr1 <>NULLIF()を返します。expr2;それ以外の場合はexpr3 [...]を返します。ここで

私の問題を表しランダムフィドルです:http://sqlfiddle.com/#!9/8076e2/1

は基本的に私が何をしようとしている以下の通りです:

SELECT IF(whatever, 1, 2) FROM testing WHERE whatever = 'abc'; 

WHEREに一致するが、レコードがあるので、基本的には、whatever0またはNULLと同じではありません。それではなぜ私は式3を結果として得ていますか?

+1

可能な重複[?MySQLでは、なぜこのIFがfalseを返す](http://stackoverflow.com/questions/1423326/in-mysql-why:あなたは、SQL標準に従ってください-is-this-if-returning-false) –

答えて

2

expr1は、ブール式、または文字列ではなく少なくとも数値であることを意図しています。

あなたはなどtruefalse、または10、技術的には、ゼロ以外の数値がtrueとして解釈されるを使用することができます。

あなたはexpr1として文字列'abc'を使用しているので、MySQLは暗黙のうちにfalseを表す数値0、にそれを変換しています。あなたはまた、CASEと同じことを行うことができます

SELECT if((whatever is not null and whatever != ''), 1, 2) 
FROM testing 
WHERE whatever = 'abc'; 

非空の文字列のための結果を返すために

、および空の文字列またはnullのための別の結果は、次のようなクエリを使用することができます

SELECT (case when (whatever is not null and whatever != '') then 1 else 2 end) 
FROM testing 
WHERE whatever = 'abc'; 
+0

私は自分が望むものを達成するための適切な方法を導くために、ちょっとした答えを広げるのは範囲外だろうか?言い換えれば、空でない文字列を真に評価するにはどうすればよいですか? –

+0

問題ありません。今私の答えに2つのサンプルクエリを追加します。 –

1
SELECT IF(COUNT(whatever) > 0, 1, 2) FROM testing WHERE whatever = 'abc'; 
関連する問題

 関連する問題