sql生成日期表问题

如何能够通过sql去快速的创建一致这样的日期表。数据库mysql,sqlsever,Oracle都可以

image.png

SQL 690624 发布于 2023-4-11 09:44
1min目标场景问卷 立即参与
回答问题
悬赏:1 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共1回答
最佳回答
0
Z4u3z1Lv6专家互助
发布于2023-4-11 09:45

declare @date datetime 

set @date='2013-08-31'

select convert(char(7),@date,120)+'-'+right('0'+convert(varchar(2),number),2) as [日期格式1] 

,ltrim(year(@date))+right(100+month(@date),2)+right('0'+ltrim(number),2) as [日期格式2] 

from master..spt_values with(nolock) 

where type='P' and number>=1 

--and number<=datediff(dd,@date,dateadd(mm,1,@date)) --对于mssql而言该语句不试用于2013-08-31的情况,这时由于9月没有31号,固计算出来的天数是30天 

and number<=datediff(dd,convert(char(7),@date,120)+'-01',convert(char(7),dateadd(mm,1,@date),120)+'-01')--转换为1号来计算天数 

/** 

日期格式1       日期格式2 

----------- -------------------- 

2013-08-01  20130801 

2013-08-02  20130802 

2013-08-03  20130803 

2013-08-04  20130804 

2013-08-05  20130805 

2013-08-06  20130806 

2013-08-07  20130807 

2013-08-08  20130808 

2013-08-09  20130809 

2013-08-10  20130810 

2013-08-11  20130811 

2013-08-12  20130812 

2013-08-13  20130813 

2013-08-14  20130814 

2013-08-15  20130815 

2013-08-16  20130816 

2013-08-17  20130817 

2013-08-18  20130818 

2013-08-19  20130819 

2013-08-20  20130820 

2013-08-21  20130821 

2013-08-22  20130822 

2013-08-23  20130823 

2013-08-24  20130824 

2013-08-25  20130825 

2013-08-26  20130826 

2013-08-27  20130827 

2013-08-28  20130828 

2013-08-29  20130829 

2013-08-30  20130830 

2013-08-31  20130831 

*/ 

--------- 

SQLSERVER的

  • 690624 690624(提问者) 你这个是正常输出的日期表,我还需要按规则:如当前为4月25日 到5月24日为4月份,以此类推这样生成的日期,共四列
    2023-04-11 09:47 
  • Z4u3z1 Z4u3z1 回复 690624(提问者) 最方便的方法:你这样生成正常日期后再嵌套一层select 里面用case when then else end判断一下呗
    2023-04-11 09:49 
  • 1关注人数
  • 336浏览人数
  • 最后回答于:2023-4-11 09:45
    请选择关闭问题的原因
    确定 取消
    返回顶部