【问题标题】:Return Blank Value instead of '?'返回空白值而不是“?”
【发布时间】:2021-10-08 01:59:09
【问题描述】:

我正在处理的查询是提取采购订单号。在某些情况下,采购订单编号是从旧系统转换而来的。我正在尝试列出新的/转换的 PO 编号以及旧的 PO 编号。在没有旧 PO 编号的情况下,查询返回“?”而不是空白。

我一直在寻找一种方法,让它以空白的形式返回,但没有任何运气。我在查询中添加了以下内容,但没有成功:

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

返回此的示例:

PO_NUMBER LEGACY_PO_NUMBER
8173063 ?
8167171 MF76991001

【问题讨论】:

  • 你的客户是什么?例如。默认情况下,Teradata 的 BTEQ 和 SQL 助手都将 NULL 显示为问号(可以更改)。 char2hexint(PO_PO_DETAILS.REFERENCE_NBR) 为这些行返回了什么?

标签: sql odbc teradata


【解决方案1】:

我认为与问号的比较可能会在这里产生问题。您可以尝试以下方法并在此处分享输出吗?

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

【讨论】:

  • 感谢您的输入,但结果相同。
  • 我可以在此字段中为特定的采购订单编号提供实际值吗?
  • 对于 PO 编号 8173063,Legacy PO Number 字段为空白,但输出 ? 当我复制单元格时,它只显示? (没有空格或其他字符)
  • 是 实际上代表任何特殊字符还是就在那里?您可以尝试使用 trim(尾随 '' from PO_PO_DETAILS.REFERENCE_NBR),然后将问号符号与其他符号进行比较。由于它是遗留数据,我无法在本地重新创建相同的数据。
  • 是为了在评论中添加换行符,而不是在查询中!很抱歉造成混乱
【解决方案2】:

@dnoeth 在评论中正确回答了这个问题。我正在使用 SQL 助手,并且将 Null 字段设置为显示为?。

我通过转到“工具”>“选项”>“数据格式”来更改此设置,然后清除“为空数据值显示此字符串”文本字段。值现在显示为空白。

【讨论】:

  • 由于 Terada 区分 NULL 和空字符串 ('') 现在您将无法在输出中区分它们(并且 NULL 无法与带有 = 的任何内容进行比较)。无论 DBMS 是什么,我的首选设置是NULL<NULL>。问号不是那么有用,因为它可能是由无效的代码页产生的
【解决方案3】:

该字符串可能看起来像'?',但事实并非如此。也许有尾随空格。或隐形字符。您可能会发现正则表达式更有帮助:

(CASE WHEN REGEXP_LIKE(PO_PO_DETAILS.REFERENCE_NBR, '^[0-9A-Z]+$'
      THEN PO_PO_DETAILS.REFERENCE_NBR
      ELSE ''
 END)

【讨论】:

  • @Grodon Linoff 我输入:(CASE WHEN REGEXP_LIKE(PO_PO_DETAILS.REFERENCE_NBR, '^[0-9A-Z]+$') THEN IS NULL THEN PO_PO_DETAILS.REFERENCE_NBR ELSE '' END) AS LEGACY_PO_NUMBER它给出了“ORA-00936:缺少表达式”错误。
猜你喜欢
  • 1970-01-01
  • 2013-10-13
  • 2023-03-15
  • 2018-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-13
相关资源
最近更新 更多