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

SQL查询:保留所有timestamp并将value列负值替换为0

解决SQL中将负值替换为0且保留所有记录的需求

核心需求是保留表中所有timestamp记录,同时将value列的负值替换为0——不能用WHERE value >= 0过滤(会丢失负值对应的时间记录),MAX()是聚合函数(用于分组取最大值),不适合单行列内的判断。

通用解决方案(所有SQL数据库支持)

使用CASE WHEN条件判断,逐行处理value值:

SELECT 
  timestamp,
  CASE 
    WHEN value < 0 THEN 0
    ELSE value
  END AS value
FROM my_table;

这个写法兼容性最强,无论你用哪种数据库都能生效,逻辑清晰:当value小于0时返回0,否则返回原数值,所有timestamp记录都会被保留。

特定数据库简化写法

如果你的数据库支持内置函数,可以用更简洁的语法:

  • MySQL/MariaDB/PostgreSQL/Oracle:使用GREATEST()函数(取多个值中的最大值),刚好满足“取value和0中较大的那个”的需求:
    SELECT timestamp, GREATEST(value, 0) AS value FROM my_table;
    
  • SQL Server(2012及以后):使用IIF()简化条件判断:
    SELECT timestamp, IIF(value < 0, 0, value) AS value FROM my_table;
    
    SQL Server 2022及以后也支持GREATEST()函数,写法和上面一致。

效果验证

针对你提供的原表数据,执行上述任意语句后,都会得到期望结果:

timestampvalue
2021-01-01 00:00:001
2021-01-01 00:01:000
2021-01-01 00:02:003

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 10:23:14