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.