You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL实现:Salary列为负值时给NOMINAL_MAX添加负号的方法

实现方案

你给出的示例逻辑里的SALARY = "-"是伪代码,实际判断SALARY数值小于0即可,以下是不同场景的实现:

  • 通用SQL(兼容所有主流数据库,包括Oracle、SQL Server、MySQL、PostgreSQL)用CASE WHEN语法:
SELECT 
    其他需要查询的字段,
    SALARY,
    CASE WHEN SALARY < 0 THEN NOMINAL_MAX * -1 ELSE NOMINAL_MAX END AS NOMINAL_MAX
FROM 你的表名;
  • 支持IF函数的数据库(比如MySQL、PostgreSQL 12+)可以用简化写法:
SELECT 
    其他需要查询的字段,
    SALARY,
    IF(SALARY < 0, NOMINAL_MAX * -1, NOMINAL_MAX) AS NOMINAL_MAX
FROM 你的表名;

如果需要封装为存储过程,以下是MySQL版本的参考示例:

DELIMITER //
CREATE PROCEDURE CalcNominalMax()
BEGIN
    SELECT 
        -- 替换为你实际需要返回的业务字段
        id,
        SALARY,
        CASE WHEN SALARY < 0 THEN NOMINAL_MAX * -1 ELSE NOMINAL_MAX END AS NOMINAL_MAX
    FROM 你的表名;
END //
DELIMITER ;

-- 调用存储过程
CALL CalcNominalMax();

注意事项

  • 如果你的SALARY字段是字符串类型存储、负号单独放在首位,需要先转成数值再判断,判断条件可以写成CAST(SALARY AS DECIMAL(18,4)) < 0
  • 可以根据业务需要调整NOMINAL_MAX的计算精度,避免浮点数丢失精度

内容的提问来源于stack exchange,提问作者Przemek Dabek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 01:39:03