SQL:三元运算符

9
在C++中,你可以这样做:
T.x = (T.y > 1 && (T.x - T.y < 0)) ? 0 : (T.x - T.y)

几乎可以说是简单易懂的英语,它的含义是

if T.y > 1 and T.x-T.y < 0 then
    set T.x to 0
else 
    set T.x to T.x-T.y 

不使用存储过程或触发器,仅使用SQL是否可以完成相同的操作?


请参见:http://dev.mysql.com/doc/refman/5.0/en/case-statement.html - xkeshav
请查看https://dev59.com/EnI-5IYBdhLWcg3w1sXi。 - James Jithin
4个回答

11

使用CASE语句:

CASE WHEN T.y > 1 AND (T.x - T.y) < 0 THEN 0 ELSE (T.x - T.y) END

这里分号作为语句终止符是否有效? - onedaywhen
@onedaywhen 没错。我已经将它删除,因为这只是一个片段而不是完整的陈述。 - ta.speot.is

5
是的,这是可能的,看一下文档,它说:

IF(expr1,expr2,expr3)

如果 expr1 为 TRUE(expr1 <> 0 并且 expr1 <> NULL),则 IF() 返回 expr2;否则返回 expr3。

以下未经测试的代码应该符合您的要求:
SELECT IF(((T.y > 1) and (T.x-T.y < 0)), 0, (T.x-T.y))

似乎文档有误,因为(expr1 <> 0 and expr1 <> NULL)是未知的。 - onedaywhen
这意味着类似于IF(0, 是的, 否)或者IF(NULL, 是的, 否)这样的语句都会返回否。 - CloudyMarble

0
IF search_condition THEN statement_list
    [ELSEIF search_condition THEN statement_list] ...
    [ELSE statement_list]
END IF

请查阅此手册获取详细信息控制流函数


0

简体中文:

SELECT *, 
      CASE WHEN (y > 1 AND x < y) THEN 0 ELSE (x - y) END AS result
 FROM T;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接