You need to enable JavaScript to run this app. SQL查询PO号时LEGACY_PO_NUMBER返回'?'无法替换为空值求助
优惠活动
大模型
产品
解决方案
定价
更多

SQL查询PO号时LEGACY_PO_NUMBER返回'?'无法替换为空值求助

问题原因

你的CASE逻辑本身语法是正确的,没有生效基本是以下两种原因:

  • REFERENCE_NBR 字段中存储的?前后带有不可见字符,比如空格、制表符、换行符、全角空格等,导致精确匹配'?'时匹配失败
  • 存储的是全角问号?,和你匹配的半角问号?不一致,也会出现匹配失效的情况
解决方案

方案1:先去除首尾空白再匹配(最常用)

先通过TRIM函数去除字段首尾的空白字符后再做匹配,修改后的逻辑如下:

REPLACE (PO_PO.PO_NUMBER,',','') AS PO_NUMBER,
(CASE 
    WHEN TRIM(PO_PO_DETAILS.REFERENCE_NBR) IS NULL THEN ''
    WHEN TRIM(PO_PO_DETAILS.REFERENCE_NBR) = '?' THEN ''
    ELSE PO_PO_DETAILS.REFERENCE_NBR
 END) AS LEGACY_PO_NUMBER 

方案2:简化写法(适配绝大多数数据库)

可以用NULLIF+COALESCE的组合简化逻辑,代码更简洁易读:

REPLACE (PO_PO.PO_NUMBER,',','') AS PO_NUMBER,
COALESCE(NULLIF(TRIM(PO_PO_DETAILS.REFERENCE_NBR), '?'), '') AS LEGACY_PO_NUMBER

验证排查方法

如果以上方案还是不生效,可以先执行以下查询确认异常值的具体情况:

SELECT REFERENCE_NBR, LENGTH(REFERENCE_NBR), ASCII(REFERENCE_NBR) 
FROM PO_PO_DETAILS 
WHERE PO_NUMBER = '8173063'

通过长度和ASCII码就能确定?前后是否有其他隐藏字符,或者是不是全角问号,再调整匹配条件即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 10:24:03