为什么 nvl 在 oracle 中的 concat 函数中不起作用?



我使用查询来选择表的所有列,并用逗号(',')分隔它们,但如果列的值为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开发人员上运行它。但是我得到ORA-00909:无效参数数错误。我找不到我错在哪里了。

附加问题(不需要回答):是否有一种方法可以通过不手动编写列来连接所有列?我知道有一个函数concat_ws在spark。sql和oracle,我们可以使用分隔符,但它也忽略null值,而不是用'null'字符串替换它们,但我必须再次手动编写所有列,即使在concat_ws。

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

但是有一个concat操作符,||,它可以做你想要的:

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

最新更新