sqlite是否在select中支持任何类型的IF(condition)语句


78

sqlite是否在select语句中支持sql函数“ if”?

例如

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

如果长度超过4个字符,则返回a。否则它将返回''为b

如果它在选择中支持条件,则应使用什么语法?

我已经检查了 http://sqlite.org/lang_corefunc.html,但看不到。

Answers:


128

请参阅案例表达式。

在其他编程语言中,CASE表达式的作用类似于IF-THEN-ELSE。

举个例子

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

1
dunno为什么对于诸如C中的三元运算符之类的简单事物,它们也不能具有较短的语法。
迈克尔

18

您可以为此使用案例

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

奇; 该链接不适用于iceweasel。它将导致找不到文档错误(/lang_5Fexpr.html)。地址栏中的地址仍然是正确的地址(... / lang_expr.html)。不知道为什么。尽管地址正确,但是刷新将无法进行;必须点击地址栏中的Enter才能获取页面。
Inshallah

我想降价不喜欢下划线。我已更改链接以使用snurl重定向器
Paul Dixon

并且您不应该使用重定向器[因此现在存在直接URL
mmmmmm 2012年

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
Alexander Tverdohleb

@AlexanderTverdohleb你是什么版本?尝试SELECT sqlite_version();以与尝试执行无效语句相同的方式执行。
SteakOverflow

问题出在SQLite版本上。我对其进行了更新,并且功能正常。@ SteakOverflow
Alexander Tverdohleb
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.