sql-server - 如何在sql server中获取两个日期之间的当前月份名称,开始日期和结束日期

标签 sql-server date datetime

create procedure dummy2
as
begin
declare @sDate datetime,
        @eDate datetime

select  @sDate = '2013-02-25',
        @eDate = '2013-03-25'

;with cte as (


  select  convert(datetime,left(convert(varchar,@sdate,112),6) + '01') startDate ,
       month(@sdate) n
  union all
  select dateadd(month,n,convert(datetime,convert(varchar,year(@sdate)) + '0101')) startDate,
        (n+1) n 

  from cte
  where n < month(@sdate) + datediff(month,@sdate,@edate)  
)

select CONVERT(varchar(20), DATENAME(MONTH, startdate))as Months, startdate, dateadd(day,-1,dateadd(month,1,startdate)) enddate
from cte
end

Months  startdate   enddate
February    2013-02-01 00:00:00.000     2013-02-28 00:00:00.000
March   2013-03-01 00:00:00.000 2013-03-31 00:00:00.000

您好,我需要获取开始日期和结束日期的列表,两个日期之间的月份名称,上面是我的查询,但结果不正确..我需要如下所示的结果

注意:开始日期和结束日期是我给出的,在那几天之间我需要月份列表开始日期和结束日期,月份名称

月份 |开始日期 |结束日期


二月 | 2013-02-25 | 2013-02-28 行军 | 2013-03-01 | 2013-03-25

最佳答案

这可能对你有帮助

declare @sDate datetime,
        @eDate datetime
select  @sDate = '2013-02-21',
        @eDate = '2013-04-25'
;WITH CTE_TEST AS (
    SELECT @sDate SDATE,DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@sDate)+1,0)) EDATE
    UNION ALL
    SELECT  EDATE+1,DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,DATEADD(MONTH,1,SDATE))+1,0))
    FROM    CTE_TEST C WHERE DATEADD(MONTH,1,SDATE) < DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@eDate)+1,0))
)   
SELECT DATENAME(MONTH,SDATE) MNAME,SDATE,(CASE WHEN EDATE > @eDate THEN @eDate ELSE EDATE END) EDATE FROM CTE_TEST  

关于sql-server - 如何在sql server中获取两个日期之间的当前月份名称,开始日期和结束日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36195750/

相关文章:

sql - 为结果表提供列名

sql-server - 存储 Windows 服务的用户名和密码的最佳方式是什么?

php - strtotime php 函数未按预期运行

java - 如何使用Java获取两个日期之间的月份名称

php - 时间字符串到时间戳

mysql - 在整个MySQL数据库中搜索日期 "0000-00-00 00:00:00"?

SQL 查询未运行,其中列名是保留字

java - 将字符串转换为日期并在 ArrayList Java 中进行比较

ruby-on-rails - 无法获得所需的日期时间格式rails 3

sql - 如何使用 SQL Server 读取最后一行