首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQLite中的IF()语句替代

SQLite中的IF()语句替代
EN

Stack Overflow用户
提问于 2011-02-02 20:08:15
回答 3查看 74.6K关注 0票数 31

我有MySQL (Perl)的代码:

代码语言:javascript
复制
UPDATE pages
SET rkey = rkey + 2,
    lkey = IF(lkey >= $key, lkey + 2, lkey)
WHERE rkey >= $key

我需要在SQLite中使用这段代码,但是不支持IF()函数。我能做些什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-02-02 20:11:39

对于泛型SQL,您可以使用CASE

SQL用于向

提供if-then-else类型的逻辑。它的语法是:

SELECT CASE ("column_name") WHEN "condition1“THEN "result1”WHEN "condition2“THEN "result2”...否则"resultN“以"table_name”结尾

来自http://www.sqlite.org/lang_expr.html“CASE表达式”一节

例如。

代码语言:javascript
复制
UPDATE pages
SET rkey = rkey + 2,
    lkey = CASE  WHEN lkey >= $key THEN lkey + 2 ELSE lkey END
WHERE rkey >= $key

另一个关于SQLite的链接& CASE (带有subselect更新的示例) http://sqlite.awardspace.info/syntax/sqlitepg09.htm

CASE可以在泛型SQL中的UPDATE中使用,但我不知道SQLite对CASE更新的支持

http://www.craigsmullins.com/ssu_0899.htm部分“修改数据时使用CASE表达式”

票数 68
EN

Stack Overflow用户

发布于 2011-02-02 20:26:49

代码语言:javascript
复制
UPDATE pages
SET rkey = rkey + 2,
    lkey = IF(lkey >= $key, lkey + 2, lkey)
WHERE rkey >= $key

???它转到

代码语言:javascript
复制
UPDATE pages
SET lkey = lkey + 2
WHERE rkey >= $key AND lkey >= $key

UPDATE pages
SET rkey = rkey + 2,
WHERE rkey >= $key

是不是更好?

票数 7
EN

Stack Overflow用户

发布于 2020-05-16 03:28:47

SQLite版本3.32.0及更高版本支持IIF

iif(X,Y,Z)

如果X为真,则iif(X,Y,Z)函数返回值Y,否则返回值Z。

iff(X,Y,Z)函数在逻辑上等价于CASE表达式"CASE WHEN X THEN Y ELSE Z END“,并且生成与CASE表达式相同的字节码。

例如。

代码语言:javascript
复制
UPDATE pages
SET rkey = rkey + 2,
    lkey = IIF(lkey >= $key, lkey + 2, lkey)
WHERE rkey >= $key;
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4874285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档