WHERE 中的多个值基于条件
Multiple values in WHERE based on condition
我有一个输入参数,基于它我还必须包含 NULL 和 EMPTY VALUES。
If(TYPE=='HIGH') THEN TYPE='HIGH' OR TYPE ='' OR TYPE IS NULL
IF(TYPE=='LOW') THEN TYPE='LOW'
查询我试过了,但没有用。
SELECT * FROM PAYRECORDS
WHERE (TYPE =(CASE WHEN TYPE=:IP_TYPE THEN TYPE END)
OR TYPE IS NULL OR TYPE='')
只需使用布尔逻辑:
WHERE (:IP_TYPE = 'HIGH' AND (TYPE = 'HIGH' OR TYPE = '' OR TYPE IS NULL)
) OR
(:IP_TYPE = 'LOW' AND TYPE = 'LOW')
或更简洁:
WHERE :IP_TYPE = TYPE OR
(:IP_TYPE = 'HIGH' AND (TYPE = '' OR TYPE IS NULL))
在Oracle中,一个空字符串''
等同于NULL
;所以你的过滤器可以简单地是:
SELECT *
FROM PAYRECORDS
WHERE :ip_type = type
OR (:ip_type = 'HIGH' AND type IS NULL);
您还可以使用 NVL()
来考虑当列 type
未填充时应将其视为 HIGH
:
SELECT *
FROM PAYRECORDS
WHERE NVL(type, 'HIGH') = :ip_type;
我有一个输入参数,基于它我还必须包含 NULL 和 EMPTY VALUES。
If(TYPE=='HIGH') THEN TYPE='HIGH' OR TYPE ='' OR TYPE IS NULL
IF(TYPE=='LOW') THEN TYPE='LOW'
查询我试过了,但没有用。
SELECT * FROM PAYRECORDS
WHERE (TYPE =(CASE WHEN TYPE=:IP_TYPE THEN TYPE END)
OR TYPE IS NULL OR TYPE='')
只需使用布尔逻辑:
WHERE (:IP_TYPE = 'HIGH' AND (TYPE = 'HIGH' OR TYPE = '' OR TYPE IS NULL)
) OR
(:IP_TYPE = 'LOW' AND TYPE = 'LOW')
或更简洁:
WHERE :IP_TYPE = TYPE OR
(:IP_TYPE = 'HIGH' AND (TYPE = '' OR TYPE IS NULL))
在Oracle中,一个空字符串''
等同于NULL
;所以你的过滤器可以简单地是:
SELECT *
FROM PAYRECORDS
WHERE :ip_type = type
OR (:ip_type = 'HIGH' AND type IS NULL);
您还可以使用 NVL()
来考虑当列 type
未填充时应将其视为 HIGH
:
SELECT *
FROM PAYRECORDS
WHERE NVL(type, 'HIGH') = :ip_type;