基于SQL条件的高级查询构建

时间:2014-02-11 21:14:49

标签: sql

我正在尝试根据条件编写复杂的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 

提前谢谢。

1 个答案:

答案 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将返回nullnull参数。在Postgresql中,与null的比较将返回null。如果传递的变量为空,则仅检查第二个条件。