Sql 获取日期记录-在某些情况下没有结束日期

Sql 获取日期记录-在某些情况下没有结束日期,sql,date,between,Sql,Date,Between,数据库的结构如下所示 ----------------------------------- | product | start_year | end_year | ----------------------------------- | prod_1 | 2001 | 2005 | | prod_2 | 2002 | 2010 | | prod_3 | 2003 | | | prod_4 | 2004

数据库的结构如下所示

-----------------------------------
| 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   |
-----------------------------------
 SELECT  product FROM table WHERE start_year='2003' and(end_year  IS NULL OR end_year = '');
某些字段“结束年份”为空,空白单元格表示当前年份。 我有一个参数year,我希望接收年份介于两个日期(开始年份和结束年份)之间的记录

 SELECT  product FROM table WHERE start_year='2003' and(end_year  IS NULL OR end_year = '');
我可以使用此查询,但遗憾的是,空单元格存在问题:

select * from table where 2003 between start_year and end_year;
 SELECT  product FROM table WHERE start_year='2003' and(end_year  IS NULL OR end_year = '');

我想你应该得到开始日期和结束日期之间的年份行

 SELECT  product FROM table WHERE start_year='2003' and(end_year  IS NULL OR end_year = '');
假设开始年份小于给定年份,则应将其包括在内,您可以这样使用:

select *
from your_table
where 2003 between start_year and coalesce(end_year, 9999); -- a large year value
 SELECT  product FROM table WHERE start_year='2003' and(end_year  IS NULL OR end_year = '');

您的意思是希望记录的“结束数据”列为“无值”,而“开始日期”列为“值”

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

您可以检查
start\u year
是否大于或等于
searchyear
,并检查
end\u year
是否小于或等于
searchyear
或end\u year是否为
NULL

 SELECT  product FROM table WHERE start_year='2003' and(end_year  IS NULL OR end_year = '');
DECLARE @SearchYear INT=2004

SELECT Product
FROM [YourTable]
WHERE @SearchYear >= start_year AND (@StartYear >= end_year  OR end_year IS NULL)

我编辑了这个问题——事实上还不清楚。在这个案例中——2003年我想要得到产品:prod_1,prod_2,prod_3,prod_5,prod_6。我的错误5和6不包括在内——我的错误。2004年我想要得到产品的记录:prod_1,prod_2,prod_3,prod_4。这没关系,但我没有得到结束年为空列的记录。