2013-05-28 3 views
0

У меня есть следующий запрос:NVL функции в подзапрос

select E.EQUIPMENT_GID, NVL((SELECT SUBSTR(ES.STATUS_VALUE_GID,INSTR(ES.STATUS_VALUE_GID, '.')+1) FROM EQUIPMENT_STATUS ES WHERE ES.EQUIPMENT_GID=E.EQUIPMENT_GID 
AND ES.STATUS_TYPE_GID LIKE '%EQUIPMENT_STATUS' AND ROWNUM=1),'ZZZ') AS E_STATUS, NVL((SELECT EREF.EQUIPMENT_REFNUM_QUAL_GID FROM EQUIPMENT_REFNUM EREF WHERE EREF.EQUIPMENT_GID = E.EQUIPMENT_GID 
AND EREF.EQUIPMENT_REFNUM_QUAL_GID LIKE '%PERMANENT DISTRICT%' and rownum=1),'ZZZ') AS PERM_DISTRICT_REF, 'PSKL-'||REPLACE(SUBSTR((SELECT EREF.EQUIPMENT_REFNUM_QUAL_GID FROM EQUIPMENT_REFNUM EREF 
WHERE EREF.EQUIPMENT_GID = E.EQUIPMENT_GID AND EREF.EQUIPMENT_REFNUM_QUAL_GID LIKE '%PERMANENT DISTRICT%' AND ROWNUM=1),(INSTR((SELECT EREF.EQUIPMENT_REFNUM_QUAL_GID FROM EQUIPMENT_REFNUM EREF 
WHERE EREF.EQUIPMENT_GID = E.EQUIPMENT_GID AND EREF.EQUIPMENT_REFNUM_QUAL_GID LIKE '%PERMANENT DISTRICT%' AND ROWNUM=1), '.',1,1) +1) ), ' PERMANENT DISTRICT','') AS DISTRICT_PSKL_XID, 
**SUBSTR(E.PARK_LOCATION_GID,5,11) AS PARK_LOCATION_GID** FROM EQUIPMENT E 
WHERE E.EQUIPMENT_GID=? 

Теперь я хотел бы, чтобы проверить нулевые значения и заменить их «ZZZ» в моем подзапроса SUBSTR(E.PARK_LOCATION_GID,5,11) AS PARK_LOCATION_GID

Может ли один предложить решение к этому.

+0

Это зависит от которой RDBMS вы используете, но на некоторых это будет работать 'SUBSTR (NVL (E.PARK_LOCATION_GID, 'zzz'), 5,11) AS PARK_LOCATION_GID' –

+0

Я считаю, что nvl уникален для оракула. Но я могу ошибаться. –

ответ

0

Я получил его, он должен быть:

select E.EQUIPMENT_GID, NVL((SELECT SUBSTR(ES.STATUS_VALUE_GID,INSTR(ES.STATUS_VALUE_GID, '.')+1) FROM EQUIPMENT_STATUS ES WHERE ES.EQUIPMENT_GID=E.EQUIPMENT_GID 
AND ES.STATUS_TYPE_GID LIKE '%EQUIPMENT_STATUS' AND ROWNUM=1),'ZZZ') AS E_STATUS, NVL((SELECT EREF.EQUIPMENT_REFNUM_QUAL_GID FROM EQUIPMENT_REFNUM EREF WHERE EREF.EQUIPMENT_GID = E.EQUIPMENT_GID 
AND EREF.EQUIPMENT_REFNUM_QUAL_GID LIKE '%PERMANENT DISTRICT%' and rownum=1),'ZZZ') AS PERM_DISTRICT_REF, 'PSKL-'||REPLACE(SUBSTR((SELECT EREF.EQUIPMENT_REFNUM_QUAL_GID FROM EQUIPMENT_REFNUM EREF 
WHERE EREF.EQUIPMENT_GID = E.EQUIPMENT_GID AND EREF.EQUIPMENT_REFNUM_QUAL_GID LIKE '%PERMANENT DISTRICT%' AND ROWNUM=1),(INSTR((SELECT EREF.EQUIPMENT_REFNUM_QUAL_GID FROM EQUIPMENT_REFNUM EREF 
WHERE EREF.EQUIPMENT_GID = E.EQUIPMENT_GID AND EREF.EQUIPMENT_REFNUM_QUAL_GID LIKE '%PERMANENT DISTRICT%' AND ROWNUM=1), '.',1,1) +1) ), ' PERMANENT DISTRICT','') AS DISTRICT_PSKL_XID, 
NVL((SUBSTR(E.PARK_LOCATION_GID,5,11)),'ZZZ') AS PARK_LOCATION_GID** FROM EQUIPMENT E 
WHERE E.EQUIPMENT_GID=? 
0

Попробуйте это, если вы используете SQL:

SUBSTR(ISNULL(E.PARK_LOCATION_GID, 'zzz'),5,11) AS PARK_LOCATION_GID 
Смежные вопросы