【发布时间】:2014-09-16 04:48:25
【问题描述】:
declare @start_date as datetime = '12/31/2014'
declare @end_date as datetime = '02/15/2015'
;with cte as (
select
datename(month,@start_date) as [mnth_nm],
month(@start_date) as [mnth_no],
@start_date as dat,
DATEADD(DAY, -1 * DAY(@start_date) + 1, @start_date) as [first_day],
DATEADD(dd, -DAY(DATEADD(mm, 1, @start_date)), DATEADD(mm, 1, @start_date)) as [last_day]
union all
select
datename(month, DateAdd(Month, 1, dat)),
month(dat) + 1 as [mnth_no],
DateAdd(Month, 1, dat),
DATEADD(MONTH, 1, [first_day]),
DATEADD(dd, -DAY(DATEADD(mm, 1, dat)),
DATEADD(mm, 1, dat)) + 1
from
cte
where
DateAdd(Month,1,dat) < @end_date
)
select
[mnth_nm], [mnth_no], @start_date, [first_day], [last_day]
from
CTE
在上述 CTE 中,所需的输出应根据我的开始和结束日期给出 12 月、1 月和 2 月的输出。
【问题讨论】:
-
欢迎使用 StackOverflow:如果您发布代码、XML 或数据示例,请在文本编辑器中突出显示这些行并单击“代码示例”按钮 (
{ }) 在编辑器工具栏上以很好地格式化和语法突出显示它! -
当然 Marc 感谢您的编辑...
-
为什么这个标签同时适用于 Oracle 和 SQL Server(以及两个不同版本的 SQL Server)?代码似乎是 T-SQL,所以我猜应该删除 Oracle 标记。
标签: sql sql-server-2008 sql-server-2005