2014-02-11 30 views
0

在我的batis中,我有一個查詢將用於基於日期進行查詢,否則它應該只是獲取範圍之間的sysdate。在子句中有2個可能可執行的地方,但我只想執行其中的一個。我的batis條件執行查詢WHERE子句基於NULL變量傳入

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, 
      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

您可以加入兩個何在在一個這樣的:

WHERE 
('${passedInVar}' IS NULL AND SYSDATE BETWEEN support_version_valid_from_dt AND support_version_valid_to_dt) 
OR 
('${passedInVar}' IS NOT NULL AND support_version_valid_from_dt = to_date('${passedInVar}', 'yyyy/mm/dd')) 
2

使用dynamic 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, 
     sysdate as created_on FROM fdrdbo.v_facility_support 
WHERE 
<if test="passedInVar != null"> 
    support_version_valid_from_dt = to_date('${passedInVar}', 'yyyy/mm/dd') 
</if> 
<if test="passedInVar == null"> 
    SYSDATE BETWEEN support_version_valid_from_dt AND support_version_valid_to_dt 
</if>