【问题标题】:SQL statement equivalent to ternary operator相当于三元运算符的 SQL 语句
【发布时间】:2015-02-03 05:11:53
【问题描述】:

我想在 MySQL 中创建一个等效于 (x - y == 0) ? return 0 : return 100 的语句。可能看起来像这样:

SELECT id, [(integer_val - 10 == 0) ? 0 : 100] AS new_val FROM my_table

我想将每一行中的一个属性与某个数字进行比较,如果该数字与该行中的数字之差为0,我希望它给我0,否则,我希望它给我100 .

例子:

my_table 上应用此查询(10 是“比较”数字):

id  |   integer_val
===================
1   10
2   10
3   3
4   9

会返回这个:

id  |   new_val
===================
1   100
2   100
3   0
4   0

我该怎么做?

【问题讨论】:

  • 为什么不用case语句

标签: mysql sql select if-statement case


【解决方案1】:

使用case when 声明:

select *, (case when integer_val = 10 then 100 else 0 end) as New_Val 
from yourtable

【讨论】:

    【解决方案2】:

    尝试使用IF function

    SELECT id, IF(integer_val - 10 = 0, 0, 100) AS new_val FROM my_table
    

    (我坚持你的条件表达式,但它可以简化一点,因为integer_value - 10 = 0integer_value = 10 具有完全相同的真值。)

    请注意,IF 函数不同于 MySQL 用于存储程序的 IF 语句。

    【讨论】:

      【解决方案3】:

      试试这个:

      SELECT id, IF(integer_val = 10, 100, 0) AS new_val 
      FROM my_table;
      

      SELECT id, (CASE WHEN integer_val = 10 THEN 100 ELSE 0 END) AS new_val 
      FROM my_table;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-10-13
        • 2016-04-25
        • 2016-06-28
        • 2017-10-20
        • 1970-01-01
        • 2011-07-11
        • 1970-01-01
        相关资源
        最近更新 更多