如何使用非递归方法创建月中所有日期的列表? (提供递归样本)

时间:2015-12-22 14:01:27

标签: sql recursion sql-server-2012

我对本月的日子感兴趣。以下代码是我如何以递归方式执行此操作:

if let cell1 = x as? CustomCell1 {
    //Use cell1 here
}

if let cell2 = x as? CustomCell2 {
    //Use cell2 here
}

我欣赏以上可能不是最佳的。但我的问题是如何实现上述非递归而不是硬编码任何日期。

编辑:完全删除CAST到VCHAR,感谢'Gordon Linoff'的建议。

1 个答案:

答案 0 :(得分:2)

通常,名为master..spt_values的表用于此目的。它没有记录,但通常可用。实际上,可以使用任何至少有31行的表。

因此,要生成数字并构建日期:

with n as (
      select top 31 row_number() over (order by (select null)) as n
      from master..spt_values
     )
select datefromparts(year(getdate()), month(getdate()), n.n) as thedate
from n
where n.n <= day(eomonth(getdate()));

注意:datefromparts()是构建日期的一种非常方便的方法。此外,在SQL Server中使用varchar时,始终包含长度。默认值因上下文而异,查找此问题导致的错误可能非常困难。