【SQL】根据日期范围按月一行拆分数据
根据日期范围按月一行拆分数据
代码来源:https://www.5axxw.com/questions/content/90bwua
Select
[WL_ID]
,YEAR(dateadd(MONTH,N,[WL_StartDate])) '年份'
,MONTH(dateadd(MONTH,N,[WL_StartDate])) '月份'
,[WL_StartDate] '开始日期'
,[WL_CancelDate] '结束日期'
From WhiteList
Join (
Select Top 1000 N=-1+Row_Number() Over (Order By (Select Null)
)
From master..spt_values
) B on N <= datediff(MONTH,[WL_StartDate],[WL_CancelDate])
分拆前:
分拆后:
master…spt_values——系统表
可见:https://www.codenong.com/4273723/
字符串1:dateadd
返回已添加指定时间间隔的日期
表达式:DateAdd(interval, number, date)
interval必要:字符串表达式,是所要加上去的时间间隔。
number必要:数值表达式,是要加上的时间间隔的数目。其数值可以为正数(得到未来的日期),也可以为负数(得到过去的日期)。
date必要:Variant (Date) 或表示日期的文字,这一日期还加上了时间间隔。
字符串2:datediff
后面日期减去前面的日期(enddate-startdate)
表达式:datediff(datepart,startdate,enddate)
datepart:规定应在日期的哪一部分计算差额
参数设定值
datepart/interval | 含义 | 简称 |
---|---|---|
year | 年 | yy/yyyy |
month | 月 | mm/m |
day | 日 | dd/d |
quarter | 季度 | qq/q |
Hour | 时 | hh/h |
minute | 分 | mi,n |
second | 秒 | ss,s |