2012-02-21 39 views
0

我有一個數據結果,我想過濾兩個不同的日期。SQL檢查空日期和大小寫切換

除了當completion_date爲空時,以下方法正在工作。如果它爲空,我想使用一個名爲created_date的不同字段。

string strSQL = string.Format(@"select * from my_table 

      where user_Id = {0} 

      AND [completion_date] between {1} AND {2} 

      order by completion_status desc, [completion_date] asc" 
      , userId, dateStart, dateEnd, visibilityIndicator); 

也許是這樣的:

string strSQL = string.Format(@"select * from my_table             
where user_Id = {0} 


CASE completion_date 
    WHEN is null THEN [completion_date] between {1} AND {2} 
    ELSE [created_date] between {1} AND {2} 

END 

AND      
      order by completion_status desc, [completion_date] asc" 
      , userId, dateStart, dateEnd, visibilityIndicator); 

什麼是檢查爲空值的最佳方式,然後切換到CREATED_DATE?

回答

3
where isnull(completetion_date,created_date) between {1} and {2} 

應該工作

+0

感謝那些確實做的伎倆。 :) – User970008 2012-02-22 01:29:27

0
string strSQL = string.Format(@"select * from my_table 
where user_Id = {0} 
AND ISNULL([completion_date],[created_date]) between {1} AND {2} 
order by completion_status desc, [completion_date] asc" 
0

的ANSI SQL兼容的版本:

SELECT * FROM my_table WHERE user_Id = {0} 
AND [completion_date] BETWEEN {1} AND {2} 
OR ([completion_date] IS NULL AND [created_date] BETWEEN {1} AND {2}) 
ORDER BY completion_status DESC, [completion_date] ASC 
+0

也有ANSI'COALESCE',但不知道它是否適用於此...也許。 – 2012-02-21 22:07:24

+0

謝謝!有趣的解決方案。如果可能的話,我儘量避免合併,只是作爲個人偏好。 – User970008 2012-02-22 01:30:51