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
相关产品推荐
相关产品推荐

