【问题标题】:Why nvl doesn't work inside concat function in oracle?为什么 nvl 在 oracle 的 concat 函数中不起作用?
【发布时间】:2022-06-15 21:21:57
【问题描述】:

我正在使用查询来选择表的所有列并用逗号(',')分隔它们,但如果列的值为 null,那么我将使用字符串 'null' 代替价值。

我正在尝试的查询是 -

SELECT CONCAT(NVL(ID,'null'),',',NVL(NAME,'null'),',',NVL(ROLL_NO,'null')) 
FROM DUAL
Expected result-
1,john,123
2,josh,null

我打算在 spark 临时表上运行此查询。但在此之前,我尝试在 sql developer 上运行它。 但我得到 ORA-00909 : invalid number of arguments 错误。我在这里找不到哪里出错了。

额外问题(不必回答):有没有办法通过不手动写入列来连接所有列?我知道在 spark.sql 和 oracle 中有一个函数 concat_ws,我们可以在其中使用分隔符,但它也忽略了 null 值,而不是用“null”字符串替换它们,但即使在 concat_ws 中,我也必须手动编写所有列。

【问题讨论】:

    标签: sql oracle apache-spark apache-spark-sql


    【解决方案1】:

    Oracle 的 CONCAT 函数只接受 2 个参数。

    但是有 concat 运算符 ||,它可以满足您的需求:

    SELECT NVL(ID,'null') || ',' || NVL(NAME,'null') || ',' || NVL(ROLL_NO,'null') 
    FROM DUAL
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-15
      • 2020-09-04
      • 2016-10-12
      • 1970-01-01
      • 2012-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多