如何根据ReportingMonth值计算StartDate和EndDate

时间:2018-06-07 02:05:02

标签: sql sql-server

我需要根据ReportingMonth值计算StartDate和EndDate

示例数据:

CREATE TABLE TestDate (
    [ID] [int] NULL,
    [PerID] [int] NULL,
    [CommID] [int] NULL,
    [ReportingMonth] [nvarchar](200) NULL,
    [Number] [nvarchar](200) NULL
)

Insert into TestDate ( [ID],[PerID],[CommID],[ReportingMonth],[Number])
    Values ('3820','12508','7','Jul-16','31');
Insert into TestDate ( [ID],[PerID],[CommID],[ReportingMonth],[Number])
    Values ('10235','12498','58','Aug-16','1');
Insert into TestDate ( [ID],[PerID],[CommID],[ReportingMonth],[Number])
    Values ('10235','12498','2','Jul-16','15');

我需要根据ReportingMonth计算StartDate和EndDate,并使用Number列的差异

StartDate和EndDate 的预期输出应该是这样的

ID  PerID   CommID  ReportingMonth  StartDate   Number  EndDate
3820    12508   7   Jul-16          30/06/2016  31      31/07/2016
10235   12498   58  Aug-16          15/07/2016  1       1/08/2016
10235   12498   2   Jul-16          15/07/2016  15      1/08/2016

我用来计算一个月的开始日期的SQL查询正在运行,但是当有多个相同的ID时,它无法正常工作

select [ID]
       ,[PerID]
       ,[CommID]
       ,[ReportingMonth]
       ,[Number]
       ,DATEADD(DAY, -(cast([Number] as int)), eomonth(CAST([Number] as DateTime)))  as StartDate
    from TestDate

如何只使用ReportingMonth字段

来获取StartDate和EndDate

谢谢, 和Sandeep

1 个答案:

答案 0 :(得分:0)

SQL Server非常适合计算月份转换次数。所以,这应该有效:

select cast('01-' + ReportingMonth as date) as month_start,
       eomonth(cast('01-' + ReportingMonth as date)) as month_end