如何在SQL中查找年范围内的特定年份
我将在一年内通过考试,例如2010年 我的表中有两列,如何在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
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
您可以尝试这种方式,在
你可以试试这个方法,演示一下
yearFromyearFrom为什么带有yearFrom=2005的行不命中?yearTo
的NULL
值是否有效地表示它与yearFrom
相同?你好,尼克,我正在搜索汽车零件。因此,对于2010年生产的汽车,该零件与2005年的汽车零件不兼容。因此yearTo
中的NULL
值表示该零件仅在yearFrom
中有效。这是否回答了您的问题?为什么带有yearFrom=2005
的行没有命中?yearTo
的NULL
值是否有效地表示它与yearFrom
相同?你好,尼克,我正在搜索汽车零件。因此,对于2010年生产的汽车,该零件与2005年的汽车零件不兼容。因此yearTo
中的NULL
值表示该零件仅在yearFrom
中有效。这是否回答了您的问题?这是一个很好的速记。