【问题标题】:Alternative of case expression as it doesn't support '<' ,'>' and '=' in 'when'case 表达式的替代方案,因为它不支持 'when' 中的 '<' ,'>' 和 '='
【发布时间】:2019-09-28 14:00:51
【问题描述】:

我想将工资低于 900 的员工的新工资显示为新工资

SELECT 
    ename, 
    job, 
    sal , 
    CASE sal 
        WHEN sal<900 THEN sal+100         
        ELSE sal 
    END 'NewSalary'
FROM emp;

消息 102,级别 15,状态 1,第 4 行

【问题讨论】:

  • 您确定您使用的是 MySQL 吗?这看起来很像 SQL Server 错误消息——它们是完全不同的两件事。

标签: mysql sql database case


【解决方案1】:

你没有正确使用CASE

考虑:

SELECT 
    ename, 
    job, 
    sal , 
    CASE WHEN sal<900 THEN sal+100 ELSE sal END NewSalary 
FROM emp;

注意:有一种语法允许使用CASE &lt;expr&gt; WHEN &lt;value&gt; THEN ...,但这仅适用于检查表达式是否与值等于,不支持除相等之外的其他比较。

【讨论】:

    【解决方案2】:

    在这种情况下,您不需要 CASE 语句,因为 MySql 将诸如 sal &lt; 900 之类的布尔表达式计算为 1 对于 TRUE0 对于 FALSE

    SELECT 
        ename, 
        job, 
        sal,
        sal + (sal < 900) * 100 NewSalary
    FROM emp;
    

    所以如果sal &lt; 900,那么结果将是sal + 100,因为sal &lt; 900 将评估为1,但是当sal &gt;= 900 时,结果将是sal,因为sal &lt; 900 将评估为0

    【讨论】:

    • 很好的解决方案,虽然乍一看可能不太容易理解。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 2018-02-01
    • 2012-09-20
    • 1970-01-01
    相关资源
    最近更新 更多