Конкатенация строк в то время как питание для нулей
У меня есть следующий скрипт:
select
siteid
address1,
address2,
address3,
address4,
address5
from tblsites
... который может вернуть что-то вроде:-
siteid address1 address2 address3 address4 address5
123 1 New Street NULL New Town NULL Newvile
456 2 Elm Road NULL NULL New York New York
Можно ли в Oracle надежно объединить эти данные, предоставляя нулевые значения и разделяя строки запятыми. Итак, желаемый результат для данных выше:
siteid address
123 1 New Street, New Town, Newvile
456 2 Elm Road, New York, New York
2 ответа
Решение
Ты можешь использовать NVL2
чтобы проверить, не являются ли компоненты адреса ненулевыми:
Настройка схемы Oracle 11g R2:
CREATE TABLE tblsites ( siteid, address1, address2, address3, address4, address5 ) AS
SELECT 123, '1 New Street', CAST( NULL AS VARCHAR2(50) ), 'New Town', NULL, 'Newvile' FROM DUAL UNION ALL
SELECT 456, '2 Elm Road', NULL, NULL, 'New York', 'New York' FROM DUAL;
Запрос 1:
SELECT siteid,
RTRIM(
NVL2( address1, address1 || ', ', NULL )
|| NVL2( address2, address2 || ', ', NULL )
|| NVL2( address3, address3 || ', ', NULL )
|| NVL2( address4, address4 || ', ', NULL )
|| NVL2( address5, address5 || ', ', NULL ),
', '
) AS address
FROM tblsites
| SITEID | ADDRESS |
|--------|---------------------------------|
| 123 | 1 New Street, New Town, Newvile |
| 456 | 2 Elm Road, New York, New York |
SELECT siteid,
REGEXP_REPLACE((address1||','||address2||','||address3||','||address4||','||address5),'[,]+',',') AS address
FROM tblsites
ВЫХОД
SITEID ADDRESS
123 1 New Street,New Town,New vile
456 2 Elm Road,New York,New York
DEMO