2016-07-26 5 views
1

SQL Case 함수의 작동 방식을 더 잘 이해하려고합니다.SQL 사례 조건 이해

말 예를 들어 I 쿼리 및 값 1에 다음 코드 = '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 상태에서 정지한다. 당신의 예제에서, 그것은 "Hello"가 될 것입니다.

참고 : 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

I''후 predicate'을 CASE''후는 "'ColumnName' 말을하고 더 나은 거라고 WHEN' 동시에 구문 오류입니다. " – Serg

+0

@Gordon Linoff @ https://connect.microsoft.com/SQLServer/feedback/details/690017/case-coalesce-wont-always-evaluate-in-textual-order –

+0

@NeerajPrasadSharma를 확인하십시오. . . 나는 그것이 아마도 오류라고 동의합니다. 그러나 문제는'사례'가 반환하는 것이다. 느슨하게 "단락"을 해석하면 모든 표현식이 반환되기 전에 평가할 수 있습니다. . . 이들은 오류를 반환 할 수 있습니다. –