2012-02-21 15 views
0

2つの異なる日付でフィルタリングするデータ結果があります。Null日付とケーススイッチの確認

completion_dateがnullの場合を除いて、以下は機能しています。それがnullの場合、私は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

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'もありますが、ここに該当するかどうかは確かではありません。 –

+0

ありがとう!興味深い解決策。できるだけ個人的な好みとして合体を避けようとしています。 – User970008

関連する問題