Чи підтримує sqlite будь-який оператор IF (умова) у select


79

Чи підтримує sqlite функцію sql "if" у операторі select?

наприклад

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

яка повертала б, якщо довжина була більше 4 символів. а то повернеться '' як b

Якщо він підтримує умову в select, який синтаксис слід використовувати?

Я перевірив 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 .... уявіть, скільки часу може бути запит при наведенні між собою декількох випадків!
Майкл

18

Ви можете використовувати регістр для цього:

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

Непарні; посилання не працює для льодовика. Це призведе до помилки документа не знайдено (/lang_5Fexpr.html). Адреса в адресному рядку буде правильною, хоча (... / lang_expr.html). Не знаю, чому це так. Хоча адреса правильна, оновлення не буде працювати; потрібно натиснути Enter в адресному рядку, щоб отримати сторінку.
Іншалла

Маркування не подобається підкреслювати, я думаю. Я змінив посилання, щоб скористатися перенаправником snurl
Пол Діксон,

і ви не повинні користуватися редиректором [тому пряма URL-адреса зараз там
мммммм

0

З версії 3.32.0 ви можете використовувати iif (X, Y, Z) :

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

З кодументації:

Функція iif (X, Y, Z) логічно еквівалентна і генерує той самий байт-код, що і вираз CASE "CASE WHEN X THEN Y ELSE Z END".


З якихось причин це не працює. Виконання завершено з помилками. Результат: такої функції немає: iif
Олександр Твердолеб

@AlexanderTverdohleb що ти за версія sqlite? Спробуйте виконати так SELECT sqlite_version();само, як ви намагалися виконати твердження, яке не спрацювало.
SteakOverflow

проблема була у версії SQLite. Я оновив його, і функція працює добре. @ SteakOverflow
Олександр
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.