¿SQLite admite cualquier tipo de declaración IF (condición) en una selección?

79

¿SQLite admite la función sql "si" en la declaración de selección?

por ejemplo

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

que devolvería un si la longitud fuera de más de 4 caracteres. o de lo contrario volvería '' como b

Si admite una condición en la selección, ¿cuál es la sintaxis que se debe usar?

He comprobado http://sqlite.org/lang_corefunc.html pero no puedo verlo.

Matt Peters
fuente

Respuestas:

129

Vea la expresión de caso .

Una expresión CASE cumple una función similar a IF-THEN-ELSE en otros lenguajes de programación.

Por tu ejemplo

select case when length(a) > 4 then a else '' end as b
from foo
mmmmmm
fuente
1
No sé por qué tampoco pueden tener una sintaxis más corta para cosas simples como el operador ternario en C ... ¡imagina cuánto tiempo puede ser la consulta cuando se encadenan varias declaraciones de casos!
Michael
18

Puede usar el caso para eso:

select case when length(a)>4 then a else ' ' end from foo;
Paul Dixon
fuente
Impar; el enlace no funciona para iceweasel. Causará un error de documento no encontrado (/lang_5Fexpr.html). Sin embargo, la dirección en la barra de direcciones será la correcta (... / lang_expr.html). No estoy seguro de por qué es eso. Aunque la dirección es correcta, una actualización no funcionará; tienes que presionar enter en la barra de direcciones para obtener la página.
Inshallah
a markdown no le gustan los guiones bajos, supongo. He cambiado el enlace para usar el redirector snurl
Paul Dixon
y no debe usar un redirector [por lo que la URL directa ahora está allí
mmmmmm
0

Desde la versión 3.32.0 puede usar iif (X, Y, Z) :

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

De la codificación:

La función iif (X, Y, Z) es lógicamente equivalente ay genera el mismo código de bytes que la expresión CASE "CASE WHEN X THEN Y ELSE Z END".

SteakOverflow
fuente
Por alguna razón, no funciona. La ejecución terminó con errores. Resultado: no existe tal función: iif
Alexander Tverdohleb
@AlexanderTverdohleb ¿cuál es su versión sqlite? Intente ejecutar de SELECT sqlite_version();la misma manera que intentó ejecutar la instrucción que no funcionó.
SteakOverflow
el problema fue con la versión SQLite. Lo actualicé y la función funciona bien. @ SteakOverflow
Alexander Tverdohleb