微雨新晨 2021-03-23 20:08 采纳率: 0%
浏览 19
已结题

MSSql 根据一个表两个时间字段,得到这两个时间字段内的所有月

create table #data (name varchar(50),begindate date,enddate date)
insert into #data values('甲一','2021-01-02','2021-03-05')
insert into #data values('甲二','2020-12-05','2021-01-28')
select * from #data

期望求,已知表里,两个时间字段,之间,所有月份对应一行数据;

--预期得到的结果:Begindate 和 Enddate期间的月份

name ,Startmonth,Begindate  ,Enddate

甲一 ,2021-01-01,2021-01-02 ,2021-03-05

甲一 ,2021-02-01,2021-01-02 ,2021-03-05

甲一 ,2021-03-01,2021-01-02 ,2021-03-05

甲二 ,2020-12-01,2020-12-05 ,2021-01-28

甲二,2021-01-01,2020-12-05,2021-01-28

 

  • 写回答

3条回答 默认 最新

  • 关注

    为了得到一个月的第一天,调用 DAY 函数。有了 DAY 函数,就能方便地知道给定日期是当前月份的第几天。如果用当前日期减去 DAY(GETDATE( )) 函数调用的返回值,我们将得到上个月的最后一天;在此基础上加上 1 天的话,就能计算出当前月份的第一天。为了获取当前月份的最后一天,需要调用 DATEADD 函数。在当前日期的基础上加上 1 个月,然后减去调用 DAY(GETDATE( )) 函数的返回值,这样就得到了当前月份的最后一天。

    select dateadd(day,-day(getdate())+1,getdate()) firstday,
    2       dateadd(day,
    3               -day(getdate( )),
    4               dateadd(month,1,getdate())) lastday
    5   from t1
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月1日

悬赏问题

  • ¥15 Lingo线性规划模型怎么搭建
  • ¥15 unity从3D升级到urp管线,打包ab包后,材质全部变紫色
  • ¥50 comsol温度场仿真无法模拟微米级激光光斑
  • ¥15 上传图片时提交的存储类型
  • ¥15 VB.NET如何绘制倾斜的椭圆
  • ¥15 arbotix没有/cmd_vel话题
  • ¥15 odoo17的分包重新供应路线如何设置?可从销售订单中实时直接触发采购订单或相关单据
  • ¥15 用C语言怎么判断字符串的输入是否符合设定?
  • ¥15 通信专业本科生论文选这两个哪个方向好研究呀
  • ¥50 我在一个购物网站的排队系统排队,这个排队到号后重新定向到目标网站进行购物,但是有技术牛通过技术方法直接跳过排队系统进入目标网址购物,有没有什么软件或者脚本可以用