我正在尝试根据条件编写复杂的SQL查询。如果满足条件,它应该使用一个条件运行查询,如果不满足则运行另一个条件。这怎么可能在SQL中?
SELECT distinct support_id AS object_id, 2 as app_context_id,
0 as domain_cdc_id, 'S' as object_type,
'NEW' as domain_cdc_status, 1 as attribute_group_num,s
sysdate as created_on
FROM fdrdbo.v_facility_support
WHERE support_version_valid_from_dt = to_date('${passedInVar}', 'yyyy/mm/dd')
如果${passedInVar}
为空,那么我想改为使用以下WHERE条件:
WHERE SYSDATE BETWEEN support_version_valid_from_dt AND support_version_valid_to_dt
提前谢谢。
答案 0 :(得分:1)
这将在Postgresql中有效(Postgresql中存在to_date
)
where
support_version_valid_from_dt = to_date(:passedinvar, 'yyyy/mm/dd')
or
(
sysdate between support_version_valid_from_dt and support_version_valid_to_dt
and
:passedinvar is null
)
请注意,我假设您正在使用驱动程序传递变量而不执行简单的字符串替换。
to_date
将返回null
个null
参数。在Postgresql中,与null
的比较将返回null
。如果传递的变量为空,则仅检查第二个条件。