获取一系列日期的最小和最大年份

时间:2011-08-10 08:47:33

标签: tsql sql-server-2000

我们在其中一个表中有一个日期字段,我需要从此列创建一个过滤器。我需要获得最小年份和最大年份,然后填充它们之间的年份。我可以轻松创建一个获取min和max的存储过程,然后在我的脚本中创建一个循环来实现这一点,但是想知道是否有更好的方法在sql中执行此操作。我使用的是sql server 2000。

2 个答案:

答案 0 :(得分:2)

您可以使用数字/计数表。 SQL, Auxiliary table of numbers

以下是使用master..spt_values的示例。

select number as [Year] 
from master..spt_values
where number between 2008 and 2011
  and type = 'P'

结果:

number
------
2008
2009
2010
2011

只需将between子句中的值替换为最小和最大年份。

答案 1 :(得分:0)

以下是@Mikael建议如何应用于您的特定问题的示例:

SELECT
  v.number AS Year
FROM master..spt_values v
  INNER JOIN (
    SELECT
      YEAR(MIN(Date)) AS MinYear,
      YEAR(MAX(Date)) AS MaxYear
    FROM atable
  ) ON v.number BETWEEN MinYear AND MaxYear
WHERE v.type = 'P'