在 Oracle 中有条件地连接字段
Conditionally concatenating fields in Oracle
我需要做的是在 Oracle SQL Developer 中连接 4 个字段。这些字段是:
Network, Network2, Network3, Network4
但是,有时并非所有字段都已填写。这总是按顺序发生;它永远不会只是 Network3 是空的,它们要么只填充第一个,只填充前 2 个,等等...
那么,我如何编写 Select 语句来忽略任何 NULL 字段?我需要最终结果看起来像:
Select Network, Network2, Network3, Network4 as Defect
它应该在一个字段中将缺陷显示为 "ON1, ON2, ON3, ON4" 之类的东西。但如果只填写前 2 个,我不希望它看起来像 "ON1, ON2, , , ".
使用 CONCATENATE ||
运算符和 COALESCE()
函数:
SELECT Network
|| COALESCE(' - ' || Network2, '')
|| COALESCE(' - ' || Network3, '')
|| COALESCE(' - ' || Network4, '')
as Defect
使用NVL2(v, valueIfNotNull, valueIfNull)
SELECT
Network
|| nvl2(Network2, ', ' || Network2, '')
|| nvl2(Network3, ', ' || Network3, '')
|| nvl2(Network4, ', ' || Network4, '') AS Defect
FROM my_table
我需要做的是在 Oracle SQL Developer 中连接 4 个字段。这些字段是:
Network, Network2, Network3, Network4
但是,有时并非所有字段都已填写。这总是按顺序发生;它永远不会只是 Network3 是空的,它们要么只填充第一个,只填充前 2 个,等等...
那么,我如何编写 Select 语句来忽略任何 NULL 字段?我需要最终结果看起来像:
Select Network, Network2, Network3, Network4 as Defect
它应该在一个字段中将缺陷显示为 "ON1, ON2, ON3, ON4" 之类的东西。但如果只填写前 2 个,我不希望它看起来像 "ON1, ON2, , , ".
使用 CONCATENATE ||
运算符和 COALESCE()
函数:
SELECT Network
|| COALESCE(' - ' || Network2, '')
|| COALESCE(' - ' || Network3, '')
|| COALESCE(' - ' || Network4, '')
as Defect
使用NVL2(v, valueIfNotNull, valueIfNull)
SELECT
Network
|| nvl2(Network2, ', ' || Network2, '')
|| nvl2(Network3, ', ' || Network3, '')
|| nvl2(Network4, ', ' || Network4, '') AS Defect
FROM my_table