12.4 제어 흐름 함수
표 12.6 흐름 제어 연산자
이름 | 설명 |
---|---|
CASE | CASE 연산자 |
IF() | If / else 구문 |
IFNULL() | Null if / else 구문 |
NULLIF() | expr1 = expr2의 경우 NULL을 반환합니다 |
CASE
value
WHEN [compare_value
] THENresult
[WHEN [compare_value
] THENresult
...] [ELSEresult
] ENDCASE WHEN [
condition
] THENresult
[WHEN [condition
] THENresult
...] [ELSEresult
] END첫 번째 버전은
의 경우value
=compare_value
result
가 반환됩니다. 두 번째 버전에서는 true 인 첫 번째 조건의 결과가 반환됩니다. 일치하는 결과 값이 없었던 경우는,ELSE
후 결과를 반환하고ELSE
부분이없는 경우는NULL
이 반환됩니다.mysql>
SELECT CASE 1 WHEN 1 THEN 'one'
->WHEN 2 THEN 'two' ELSE 'more' END;
-> 'one' mysql>SELECT CASE WHEN 1>0 THEN 'true' ELSE 'false' END;
-> 'true' mysql>SELECT CASE BINARY 'B'
->WHEN 'a' THEN 1 WHEN 'b' THEN 2 END;
-> NULLCASE
식의 반환 형식은 모든 반환 호환 집약적이지만, 사용되는 문맥에 따라 달라집니다. 문자열의 컨텍스트에서 사용되는 경우, 결과는 문자열로 반환됩니다. 숫자 컨텍스트에서 사용되는 경우는 결과가 10 진수, 실수 또는 정수 값으로 반환됩니다.참고여기에 표시된
CASE
식의 구문은 저장 프로그램 내부에서 사용하기 위해 섹션 13.6.5.1 "CASE 구문" 에서 설명한 SQLCASE
명령문의 구문은 약간 다릅니다.CASE
명령문은ELSE NULL
절을 가질 수 없으며,END
가 아니라END CASE
로 종료합니다.IF(
expr1
,expr2
,expr3
)expr1
이TRUE
(
및expr1
<> 0
)의 경우expr1
<> NULLIF()
는expr2
를 반환합니다. 그렇지 않으면expr3
을 반환합니다.IF()
는 사용되는 컨텍스트에 따라 숫자 또는 문자열 값을 반환합니다.mysql>
SELECT IF(1>2,2,3);
-> 3 mysql>SELECT IF(1<2,'yes','no');
-> 'yes' mysql>SELECT IF(STRCMP('test','test1'),'no','yes');
-> 'no'expr2
와expr3
중 하나만이 명시 적으로NULL
인 경우,IF()
함수의 결과 유형은 비NULL
식의 형태가됩니다.IF()
의 디폴트의 반환 값 (임시 테이블에 저장 될 때 중요 해지는 경우가 있습니다)는 다음과 같이 계산됩니다.식 반환 값 expr2
또는expr3
문자열을 반환문자열 expr2
또는expr3
은 부동 소수점 값을 반환부동 소수점 expr2
또는expr3
는 정수를 반환정수 expr2
와expr3
모두 문자열에서 두 가지 문자열에서 대소 문자를 구분하는 경우는 결과도 대소 문자를 구분합니다.참고IF
문도 있지만, 여기에서 설명되는IF()
함수와는 다릅니다. 섹션 13.6.5.2 "IF 구문" 을 참조하십시오.IFNULL(
expr1
,expr2
)expr1
이NULL
이 아니면IFNULL()
은expr1
을 반환하고, 그렇지 않으면expr2
를 반환합니다.IFNULL()
은 사용 된 문맥에 따라 숫자 또는 문자열 값을 반환합니다.mysql>
SELECT IFNULL(1,0);
-> 1 mysql>SELECT IFNULL(NULL,10);
-> 10 mysql>SELECT IFNULL(1/0,10);
-> 10 mysql>SELECT IFNULL(1/0,'yes');
-> 'yes'IFNULL(
의 디폴트의 결과 값은expr1
,expr2
)STRING
,REAL
또는INTEGER
의 순서로 두 표현식보다 "일반적인"입니다. 식이나 MySQL이 임시 테이블의IFNULL()
에서 반환 된 값을 내부에 저장해야하는 위치에 따라 테이블의 대문자와 소문자를 고려하십시오.mysql>
CREATE TABLE tmp SELECT IFNULL(1,'test') AS test;
mysql>DESCRIBE tmp;
+ ------- + -------------- + ------ + ----- + --------- + --- ---- + | Field | Type | Null | Key | Default | Extra | + ------- + -------------- + ------ + ----- + --------- + --- ---- + | test | varbinary (4) | NO | | | | + ------- + -------------- + ------ + ----- + --------- + --- ---- +이 예제에서는
test
컬럼의 형태는VARBINARY(4)
입니다.NULLIF(
expr1
,expr2
)
가 true의 경우는expr1
=expr2
NULL
을 반환하고, 그렇지 않으면expr1
을 반환합니다. 이것은CASE WHEN
와 같습니다.expr1
=expr2
THEN NULL ELSEexpr1
ENDmysql>
SELECT NULLIF(1,1);
-> NULL mysql>SELECT NULLIF(1,2);
-> 1참고인수가 동일하지 않은 경우는 MySQL에서
expr1
이 2 회 평가됩니다.