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

SQL处理逗号分隔文本列:状态判断与求和需求咨询

PostgreSQL判断逗号分隔数字列是否全为0

方法1:检查是否存在非0数值(最严谨)

直接拆分字符串为数组,展开后检查是否有任何元素转换为数值后不等于0,避免求和法的潜在误判(比如错误码包含正负抵消的情况):

SELECT 
    state,
    CASE 
        WHEN NOT EXISTS (
            SELECT 1 
            FROM unnest(string_to_array(state, ',')) AS elem
            WHERE trim(elem)::numeric != 0
        ) THEN 'OK'
        ELSE 'NOK'
    END AS status
FROM your_table;
  • 用trim(elem)处理可能存在的空格(比如"0, 2"这类格式不规范的情况)
  • 适用于所有错误码为非0数值的场景,包括正负数

方法2:修复求和思路的实现

如果坚持使用求和判断,需要处理元素的空格问题,同时注意局限性:

SELECT 
    state,
    CASE 
        WHEN (SELECT sum(trim(elem)::numeric) FROM unnest(string_to_array(state, ',')) AS elem) = 0 THEN 'OK'
        ELSE 'NOK'
    END AS status
FROM your_table;

⚠️ 注意:如果错误码存在正负抵消(比如"3,-3"),求和为0会误判为正常,仅适用于错误码均为正数的场景

方法3:正则表达式快速判断(性能最优)

如果数据格式相对规范,用正则直接匹配全0模式,无需拆分转换,性能更优:

无空格的规范格式

SELECT 
    state,
    CASE 
        WHEN state ~ '^0(,0)*$' THEN 'OK'
        ELSE 'NOK'
    END AS status
FROM your_table;

包含空格的不规范格式

SELECT 
    state,
    CASE 
        WHEN state ~ '^\s*0\s*(,\s*0\s*)*$' THEN 'OK'
        ELSE 'NOK'
    END AS status
FROM your_table;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 21:37:14