2017-01-08 8 views
0

データベースは次のように構成されています。日付の記録を取得する - 場合によっては終了日を設定しない

----------------------------------- 
| product | start_year | end_year | 
----------------------------------- 
| prod_1 | 2001 | 2005 | 
| prod_2 | 2002 | 2010 | 
| prod_3 | 2003 |   | 
| prod_4 | 2004 | 2016 | 
| prod_5 | 2005 |   | 
| prod_6 | 2005 | 2015 | 
----------------------------------- 

フィールド「end_year」は空白ですが、空白のセルは現在の年を示します。 私はパラメータの年があり、年が2つの日付(start_yearとend_year)の間にあるレコードを受け取りたいとします。

私はこのクエリを使用することができますが、残念ながら空のセルに問題があった:

select * from table where 2003 between start_year and end_year; 
+0

は、私は質問に編集 - 実際にはそれ不明であった。 – Peter

+0

この場合 - 2003年私はプロダクトを得ることを望む:prod_1、prod_2、prod_3、prod_5、prod_6。 – Peter

+0

私の間違い5と6は含まれていません - 私の間違い。 – Peter

答えて

1

私はあなたがSTART_DATEとend_dateの間の年で行を取得したいと思いますが。 START_YEARが与えられた年未満であれば、それは含まれなければならないと仮定すると、

、あなたはこのようにcoalesceを使用することができます。

select * 
from your_table 
where 2003 between start_year and coalesce(end_year, 9999); -- a large year value 
0

あなたがそのエンドデータ列なし値としてスタートレコードをしたいということを意味しました日付を値として返します。

SELECT product FROM table WHERE start_year='2003' and(end_year IS NULL OR end_year = ''); 
0

あなたはstart_yearsearchyear以上であるかどうかを確認してend_yearsearchyearまたはend_year以下であるかどうかを確認することができますがありNULL

DECLARE @SearchYear INT=2004 

SELECT Product 
FROM [YourTable] 
WHERE @SearchYear >= start_year AND (@StartYear >= end_year OR end_year IS NULL) 
関連する問題