Unterstützt SQLite jede Art von IF-Anweisung (Bedingungsanweisung) in einer Auswahl?


78

Unterstützt SQLite die SQL-Funktion "if" in der select-Anweisung?

zum Beispiel

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

was a zurückgeben würde, wenn die Länge mehr als 4 Zeichen lang wäre. oder es würde '' als b zurückgeben

Wenn es eine Bedingung in der Auswahl unterstützt, welche Syntax sollte verwendet werden?

Ich habe http://sqlite.org/lang_corefunc.html überprüft , kann es aber nicht sehen.

Antworten:


128

Siehe den Fall Ausdruck.

Ein CASE-Ausdruck spielt in anderen Programmiersprachen eine ähnliche Rolle wie IF-THEN-ELSE.

Für dein Beispiel

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

1
Keine Ahnung, warum sie nicht auch eine kürzere Syntax für einfache Dinge wie den ternären Operator in C haben können. Stellen Sie sich vor, wie lange die Abfrage dauern kann, wenn mehrere case-Anweisungen aneinander gereiht werden!
Michael

18

Sie können case dafür verwenden:

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

Seltsam; Der Link funktioniert nicht für iceweasel. Dies führt zu einem Fehler "Dokument nicht gefunden" (/lang_5Fexpr.html). Die Adresse in der Adressleiste ist jedoch die richtige (... / lang_expr.html). Ich bin mir nicht sicher, warum das so ist. Obwohl die Adresse korrekt ist, funktioniert eine Aktualisierung nicht. müssen in der Adressleiste die Eingabetaste drücken, um die Seite zu erhalten.
Inshallah

Markdown mag keine Unterstriche, denke ich. Ich habe den Link geändert, um den Snurl Redirector zu verwenden
Paul Dixon

und Sie sollten keinen Redirector verwenden [also ist jetzt eine direkte URL vorhanden
mmmmmm

0

Seit Version 3.32.0 können Sie iif (X, Y, Z) verwenden :

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

Aus der Kodokumentation:

Die Funktion iif (X, Y, Z) entspricht logischerweise dem Bytecode "CASE WHEN X THEN Y ELSE Z END" und generiert denselben Bytecode.


Aus irgendeinem Grund funktioniert es nicht. Die Ausführung wurde mit Fehlern beendet. Ergebnis: keine solche Funktion: iif
Alexander Tverdohleb

@AlexanderTverdohleb Was ist Ihre SQLite-Version? Versuchen SELECT sqlite_version();Sie, die Anweisung so auszuführen, wie Sie versucht haben, die Anweisung auszuführen, die nicht funktioniert hat.
SteakOverflow

Das Problem war mit der SQLite-Version. Ich habe es aktualisiert und die Funktion funktioniert gut. @ SteakOverflow
Alexander Tverdohleb
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.