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