【问题标题】:How to still return a default value when no record is found找不到记录时如何仍然返回默认值
【发布时间】:2021-12-08 14:43:02
【问题描述】:

当没有找到记录时,我想返回一个默认值,比如N/A。我试过DECODENVLNVL2 但仍然一无所获。我的实际查询要复杂得多,只是发布一个简化版本

SELECT DECODE(test_date,NULL,'N/A', test_date) test_date
FROM  Table1
WHERE name = 'Unknown'

【问题讨论】:

  • 只要使用nvl(min(test_date) ,'N/A')
  • 这给了我一个错误“在预期数字的地方找到了非数字字符”
  • 啊,我明白了:您不能将字符串返回到具有date 数据类型的列中。因此,您需要使用 to_char 将 min(test_date) 转换为字符串,或者使用其他内容而不是 'N/A'

标签: oracle plsql


【解决方案1】:

默认行为是当未找到任何行时,不显示任何内容。要解决此问题,您可以执行以下操作:将原始选择与另一个选择合并,如果原始选择没有行,则返回某些内容。在 emp 表上会是这样的(没有用户“xKING”):

SELECT ename FROM emp WHERE ename = 'xKING'
UNION 
SELECT 'N/A' FROM DUAL WHERE NOT EXISTS (SELECT ename FROM emp WHERE ename = 'xKING')
;

NVLDECODE 等函数会转换结果列 - 如果没有结果,则无法使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-04
    • 2022-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-25
    • 1970-01-01
    • 2012-05-20
    相关资源
    最近更新 更多