sql中,where日期条件为XX到XX,那么展示所有日期(包括没有的)

image.png

sql中,where 日期条件为date between '2021-12-01' and '2021-12-05',根据我目前的数据,只有三天的,那么怎么才能展示所有日期呢(包括没有的)

FineReport 猫头鹰的头 发布于 2021-12-16 16:53
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共6回答
最佳回答
0
Z4u3z1Lv6专家互助
发布于2021-12-16 16:58(编辑于 2021-12-16 17:03)

什么数据库? 把下边的语句括起来作为一张表 A,然后 left join 你的表 B on a.日期格式1=b.日期

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

from master..spt_values with(nolock) 

where type='P' and number>=1 

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

and number<=datediff(dd,convert(char(7),getdate(),120)+'-01',convert(char(7),dateadd(mm,1,getdate()),120)+'-01')

image.png

最佳回答
0
MorsLv5见习互助
发布于2021-12-16 16:55

你的sql数据集要有其他的日期数据,只是数据为0而已

最佳回答
0
罗罗诺亚索隆Lv5见习互助
发布于2021-12-16 16:55

做个日期维表,就是每一天的

最佳回答
0
CD20160914Lv8专家互助
发布于2021-12-16 16:55(编辑于 2021-12-16 16:57)

你日期表做为主表去左连接关联业务系统的表,做报表真的建议维护一张日期表,里面有各种维度的列。这样的话在使用时间这方面的时候就很方便,比如有周,季度,年,月,日,半年,上周五到本周四等各种类型。。。

类似

select a.date_sj,b.* from date_time a

left join ye_table b on a.date_sj=b.sj

  • 猫头鹰的头 猫头鹰的头(提问者) 你意思我明白了,总之取巧是不行的,得先建立一个日期表
    2021-12-16 16:57 
最佳回答
0
嗨-李先生Lv6见习互助
发布于2021-12-16 16:58

你可以写日期表,join 上去,这样就能查出所有的日期来了

最佳回答
0
墨残烛Lv5初级互助
发布于2021-12-16 17:00

可以用自定义函数来实现

  • 6关注人数
  • 556浏览人数
  • 最后回答于:2021-12-16 17:03
    请选择关闭问题的原因
    确定 取消
    返回顶部