2016-07-26 6 views
1

SQL Case関数の仕組みをよりよく理解しようとしています。SQLケースの状態を理解する

言ってやる例えば、私は、クエリとをvalue1に次のコードを持っている=「ABCDE」

SELECT CASE ColumnName 
      WHEN value1 LIKE '%ABC%' THEN 'Hello' 
      WHEN value1 LIKE '%CDE%' THEN 'World' 
      ELSE 'Nothing' 
     END AS Answer 
FROM TableName 

私は、このコードが返すものによって混乱しています。

私はそれがHelloWorldを返すはずだと思いますが、私が見つけた同様のクエリを実行しているだけでHelloが返されます。

誰でもこの理由を説明できますか?

おかげ

答えて

5

CASE式はWHEN/THEN句の一連の構成されています。各節は条件をテストします。

CASE式が真と評価し、THEN値を返すWHEN状態で停止します。あなたの例では、それは "こんにちは"でしょう。

注:WHEN句に条件がある場合は、CASEの後のColumnNameは構文エラーです。あなたのクエリが何かを返すので、これはタイプミスであると仮定します。

あなたは値を連結したい場合は、のような式を使用します。

SELECT ((CASE WHEN value1 LIKE '%ABC%' THEN 'Hello' ELSE '' END) + 
     (CASE WHEN value1 LIKE '%CDE%' THEN 'World' ELSE '' END) 
     ) AS Answer 
FROM TableName; 
+0

私は「'CASE'と同時にWHEN''後の '' predicate'後ColumnName'を言うよりよいいただきたいです構文エラーです。 " – Serg

+0

@Gordon Linoffこちらをご確認くださいhttps://connect.microsoft.com/SQLServer/feedback/details/690017/case-coalesce-wont-always-evaluate-in-textual-order –

+0

@NeerajPrasadSharma。 。 。私はそれがおそらくエラーであることに同意します。しかし、問題は「ケース」が返すものである。 「短絡」をゆるやかに解釈すると、何かが返される前にすべての式を評価することができます。 。 。これらはエラーを返す可能性があります。 –

関連する問題