sqlite는 선택에서 모든 종류의 IF (조건) 문을 지원합니까?


79

sqlite는 select 문에서 SQL 함수 "if"를 지원합니까?

예를 들면

select if( length( a ) > 4 , a , ' ') as b
from foo

길이가 4 자 이상이면 a를 반환합니다. 그렇지 않으면 ''를 b로 반환합니다.

선택 조건을 지원하는 경우 구문은 무엇을 사용해야합니까?

http://sqlite.org/lang_corefunc.html 을 확인 했지만 볼 수 없습니다.

답변:


129

케이스 표현식을 참조하십시오 .

CASE 표현식은 다른 프로그래밍 언어에서 IF-THEN-ELSE와 유사한 역할을합니다.

예를 들어

select case when length(a) > 4 then a else '' end as b
from foo

1
왜 그들이 C의 삼항 연산자와 같은 간단한 일에 대해 더 짧은 구문을 가질 수 없는지 모르겠습니다. 여러 case 문을 함께 묶을 때 쿼리가 얼마나 오래 걸릴 수 있는지 상상해보십시오!
— Michael

18

이에 대한 사례 를 사용할 수 있습니다 .

select case when length(a)>4 then a else ' ' end from foo;

이상한; iceweasel에서는 링크가 작동하지 않습니다. 문서를 찾을 수 없음 오류 (/lang_5Fexpr.html)가 발생합니다. 주소 표시 줄의 주소는 정확합니다 (... / lang_expr.html). 그 이유가 확실하지 않습니다. 주소는 정확하지만 새로 고침이 작동하지 않습니다. 페이지를 가져 오려면 주소 표시 줄에 Enter 키를 눌러야합니다.
— Inshallah

markdown은 내가 생각하기에 밑줄을 좋아하지 않습니다. snurl 리디렉터를 사용하도록 링크를 변경했습니다
— Paul Dixon

리디렉터를 사용해서는 안됩니다. [직접 URL이 이제 있습니다
— mmmmmm

0

3.32.0 버전부터 iif (X, Y, Z) 사용할 수 있습니다 .

select iif( length( a ) > 4 , a , ' ') as b
from foo

codumentation에서 :

iif (X, Y, Z) 함수는 CASE 표현식 "CASE WHEN X THEN Y ELSE Z END"와 논리적으로 동일하며 동일한 바이트 코드를 생성합니다.


어떤 이유로 작동하지 않습니다. 실행이 완료되었지만 오류가 발생했습니다. 결과 : 없음 같은 기능 : IIF
— 알렉산더 Tverdohleb

@AlexanderTverdohleb sqlite 버전은 무엇입니까? SELECT sqlite_version();작동하지 않는 명령문을 실행하려고 한 것과 동일한 방식으로 실행 해보십시오 .
— SteakOverflow 2010 년

문제는 SQLite 버전에서 발생했습니다. 나는 그것을 업데이트 기능이 제대로 @ SteakOverflow 작동합니다.
— 알렉산더 Tverdohleb
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.