首页 新闻 会员 周边

【求助】sqlserver 生成两个日期中间的连续的年月 ,sql语句(函数也可以,临时表也行)

0
悬赏园豆:50 [待解决问题]

具体描述(最好可以跨年,到了12月份自动转到1月份 ,不是单纯的+1)

例如用户输入:

开始年月 2017-12  

结束年月 2018-04

生成:

2017-12

2018-01 

2018-02

2018-03

2018-04

问题补充:

麻烦各位大佬看看这个简单的问题 多谢啦

专注写bug24年的主页 专注写bug24年 | 初学一级 | 园豆:66
提问于:2018-07-13 10:05
< >
分享
所有回答(7)
0

使用 CTE 递归查询方式。

具体怎写,自己琢磨

jinzhenshui | 园豆:383 (菜鸟二级) | 2018-07-13 10:33

这个递归您能写一下吗 多谢啦 

支持(0) 反对(0) 专注写bug24年 | 园豆:66 (初学一级) | 2018-08-13 17:05
0

生成这个干什么用  直接用这个时间范围不行

雷。 | 园豆:775 (小虾三级) | 2018-07-13 10:43
0

用 dateadd(mm,1,'2017-12-01')  返回  2018-01-01,(然后用convert或datepart可获取年月) ,循环几次就可以了。循环次数可以:DateDiff (mm,'2017-12-01','2018-04-01') 获取

大豆男生 | 园豆:608 (小虾三级) | 2018-07-13 10:48
0

思路,在存储过程中新建一个临时表存你需要的连续的时间,然后根据你的时间范围判断,不大于输入的最大时间时,插入一条记录,然后时间加一个月,把时间转换成你需要的函数参考 CONVERT

MrNice | 园豆:3450 (老鸟四级) | 2018-07-13 10:52
2

这个问题并不复杂,所以题主只是不想自己写代码,或者觉得自己写的太丑了,不能见人。

这种只要月份的,判断其实又不难,碰到12下个月就是年份+1,月份变1而已。

如果不想自己判断,就是用楼上的方式,先变成2008-1-1(具体日期),然后用SQL 函数加一个月,

循环,判断是否超出结束日期,取得的结果再去掉日期就是了。

爱编程的大叔 | 园豆:30839 (高人七级) | 2018-07-13 13:00

差不多这个意思

我自己写的虽然可以用 但是感觉有点问题 所以来请教一下

问题出在 P是有范围的 如果不是生成年月 而是生成年月日就会出现 只生成一半的情况

SELECT DISTINCT CONVERT
( VARCHAR ( 7 ), DATEADD( MM, NUMBER, CONVERT ( datetime, '2018-01-01', 20 )), 23 ) AS dd
FROM
MASTER..SPT_VALUES
WHERE
TYPE = 'P'
AND DATEADD(
mm,
NUMBER,
CONVERT ( datetime, '2018-01-01', 20 )) <= CONVERT (
datetime,
'2018-12-12',
20)

支持(0) 反对(0) 专注写bug24年 | 园豆:66 (初学一级) | 2018-08-13 16:57
-1

DECLARE @begin DATETIME ='2017-07-01'
DECLARE @end DATETIME ='2018-07-01'
WHILE @begin <@end
BEGIN
    PRINT SUBSTRING(CONVERT(VARCHAR,@begin, 111),0,8)
    SET @begin=DATEADD(m,1,@begin)
END

一叶兰舟飘 | 园豆:351 (菜鸟二级) | 2018-07-16 10:33

正解

支持(0) 反对(0) chengeng | 园豆:294 (菜鸟二级) | 2018-07-18 17:29
0

with cte_table(CreatedDate) as
(
select cast('2017-12-1' as datetime)
union all
select dateadd(month, 1, CreatedDate)
from cte_table
where CreatedDate < '2018-04-01'
)
select convert(varchar(7), CreatedDate, 120) as YearMonth
from cte_table
option (maxrecursion 0)

可以参考我写的原创博文:
https://www.cnblogs.com/zhang502219048/p/11108991.html

张工502219048 | 园豆:202 (菜鸟二级) | 2019-06-30 13:08
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册