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

执行多条件CASE语句报错,求TENANT_NAICS字段分类解决方案

问题根源

你遇到的报错是因为tr.TENANT_NAICS里存在非数字开头的记录(比如值以'Bu'开头),直接用left(...)::numeric强制转数字时,非数字字符无法被识别,导致报错。

解决思路

先从TENANT_NAICS里精准提取开头的数字部分,再针对数字进行分类判断,同时处理非数字开头的情况:

  • 用正则匹配提取字段开头的所有连续数字,避免固定长度截取的局限性
  • 先判断提取到的数字是否有效,再进行分类
  • 按照你的示例需求,把54开头的NAICS编码统一归为"Other Computer Related"
修改后的SQL语句
select 
    tr.OCCUPANCY_DATE, tr.END_DATE, tr.TENANT_NAICS,  
    pr.PROPERTY_STATUS, pr.NRA_BUILDING, pr.MARKET, pr.SUBMARKET, pr.FULL_ADDRESS_ONE_LINE,
    pr.LEGAL_OWNER, pr.TRUE_OWNER,
    lr.LESSOR_SUBLESSOR,
    -- 修复后的分类逻辑
    case
        -- 匹配54开头的所有NAICS编码,对应示例需求
        when substring(tr.TENANT_NAICS from '^(\d+)') ~ '^54' then 'Other Computer Related'
        when substring(tr.TENANT_NAICS from '^(\d+)')::numeric = 11 then 'Mining'
        when substring(tr.TENANT_NAICS from '^(\d+)')::numeric = 21 then 'Mining'
        when substring(tr.TENANT_NAICS from '^(\d+)')::numeric = 4821 then 'Construction'
        -- 处理非数字开头的记录,可根据需求调整显示内容
        when substring(tr.TENANT_NAICS from '^(\d+)') is null or substring(tr.TENANT_NAICS from '^(\d+)') = '' then '其他行业'
        -- 未匹配到规则的编码,保留原字段值
        else tr.TENANT_NAICS
    end as "Tenant Industry"
from space.tran tr
left join property pr on tr.ID = pr.ID
left join lease lr on tr.OID = lr.OID
where tr.STATUS = 'Existing' and tr.MARKET = 'Seattle';
关键细节说明
  • substring(tr.TENANT_NAICS from '^(\d+)'):用正则匹配字段开头的所有连续数字,比如从"543330- Other Computer Related"里提取出"543330",非数字开头的内容会提取出空字符串
  • 优先判断54开头的编码,完全匹配你给出的示例转换需求
  • 新增非数字开头的处理分支,彻底避免转换报错,你可以根据实际业务调整"其他行业"的显示内容
  • 如果使用MySQL数据库,正则语法需调整:把substring(...) from '^(\d+)'替换为regexp_substr(tr.TENANT_NAICS, '^[0-9]+')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 03:20:52