如何在SQL中查找年范围内的特定年份

如何在SQL中查找年范围内的特定年份,sql,sql-server,tsql,Sql,Sql Server,Tsql,我将在一年内通过考试,例如2010年 我的表中有两列,yearFrom和YearTo yearFrom yearTo 2009 2010 *hit 2005 *miss 2010 2015 *hit 2015 2018 *miss 2010

我将在一年内通过考试,例如2010年

我的表中有两列,
yearFrom
YearTo

yearFrom            yearTo
2009                2010        *hit
2005                            *miss
2010                2015        *hit
2015                2018        *miss
2010                            *hit
其中hit是选定的行,而miss不是

有时列中会有一个yearTo值,如果没有,则该值将为null

如何制定where子句来实现这一点

我试过了

and yearFrom >= @year and yearTo <= @year 

和yearFrom>=@year和yearTo此查询将为您提供所需的结果。它查找
@year
介于
yearFrom
yearTo
之间的行,或者如果
yearTo
NULL
,则
yearFrom
@year
相同:

SELECT *
FROM Table1
WHERE @year BETWEEN yearFrom AND yearTo
   OR yearTo IS NULL AND yearFrom = @year
输出:

yearFrom    yearTo
2009        2010
2010        2015
2010        (null)

此查询将为您提供所需的结果。它查找
@year
介于
yearFrom
yearTo
之间的行,或者如果
yearTo
NULL
,则
yearFrom
@year
相同:

SELECT *
FROM Table1
WHERE @year BETWEEN yearFrom AND yearTo
   OR yearTo IS NULL AND yearFrom = @year
输出:

yearFrom    yearTo
2009        2010
2010        2015
2010        (null)

我认为你的逻辑是颠倒的:

and yearFrom <= @year and yearTo >= @year 
和yearFrom=@year

我认为你的逻辑是颠倒的:

and yearFrom <= @year and yearTo >= @year 
和yearFrom=@year

您可以尝试这种方式,在


你可以试试这个方法,演示一下


yearFrom
yearFrom为什么带有
yearFrom=2005的行不命中?
yearTo
NULL
值是否有效地表示它与
yearFrom
相同?你好,尼克,我正在搜索汽车零件。因此,对于2010年生产的汽车,该零件与2005年的汽车零件不兼容。因此
yearTo
中的
NULL
值表示该零件仅在
yearFrom
中有效。这是否回答了您的问题?为什么带有
yearFrom=2005
的行没有命中?
yearTo
NULL
值是否有效地表示它与
yearFrom
相同?你好,尼克,我正在搜索汽车零件。因此,对于2010年生产的汽车,该零件与2005年的汽车零件不兼容。因此
yearTo
中的
NULL
值表示该零件仅在
yearFrom
中有效。这是否回答了您的问题?这是一个很好的速记。