我必须根据用户提供输入的开始日期和结束日期之间的间隔来查找月份,日期或月份,周或周日或仅天数的总数。
如果两个日期之间的间隔不超过30,那么输出应该只有几天
例如 - StartDate - 7月1日EndDate-7月24日
Time_Type StartDate EndDate
Day 1 July 24 July
间隔时间超过30天但不到90天,而且输出应仅在几天和几周内,我的周从星期一开始到周日结束
例如 - StartDate - 2015年7月1日EndDate-23 2015年9月
Time_Type StartDate EndDate
Day 1-07-2015 5-07-2015
Week Week2(july) Week3(September)
Day 21-09-2015 23-09-2015
`Interval is more than 90 Days than` output should be in days and months
例如 - StartDate - 2015年4月22日EndDate-8 2015年12月
Time_Type StartDate EndDate
Day 22-04-2015 30-04-2015
Week May2015 November 2015
Day 01-12-2015 08-12-2015
这里的周数可能是一周一年的明显,如第2周(7月)将是26周。
答案 0 :(得分:2)
您可以使用DATEDIFF(D,StartDate,EndDate)
查看两个日期之间的天数。
然后您可以使用CASE WHEN X < 120 THEN 'A' WHEN X < 90 THEN 'B' ELSE 'C' END
选择格式样式。
我认为这就是你想要做的格式化
SELECT DATENAME(DAY,GETDATE()) + ' ' + DATENAME(MONTH,GETDATE())
SELECT 'Week ' + CAST(DATEPART(WEEK,GETDATE()) - DATEPART(WEEK,DATENAME(YEAR,GETDATE()) + '/' + DATENAME(MONTH,GETDATE()) + '/' + '1') AS NVARCHAR)+ ' ' + DATENAME(MONTH,GETDATE())
SELECT DATENAME(MONTH,GETDATE()) + ' ' + DATENAME(YEAR,GETDATE())
但我不确定你在使用WEEK
做什么?任何月份的第1周都没有这样的事情,因为月份并不总是从周一开始#&lt;
我所做的就是计算一年中的一周(日期)并减去一个月中第一天(该日期)的一周。
您需要使用我拥有GETDATE()
的日期。所以在你的情况下,你这样做一次使用StartDate,再次使用EndDate。如果要多次使用它,您可能希望将此格式代码转换为函数。
我希望你能把这些放在一起,我可以为你做,但我相信你可以用你想要的方式得到你想要的东西。如果没有,请告诉我,我会发布更多详情。
答案 1 :(得分:0)
这将计算时间间隔大于30的整周或数月,否则只计算天数:
DECLARE @StartDate date = '2015-07-01'
DECLARE @EndDate date = '2015-12-24'
SELECT
CASE timetype
WHEN 'days'
THEN null
WHEN 'weeks'
THEN
datediff(d, @StartDate, @EndDate) -
datediff(week, dateadd(d, datediff(d, 1, @StartDate) / 7 * 7, 7),
dateadd(d, datediff(d, -1, @EndDate) / 7 * 7, 0)) * 7
WHEN 'months'
THEN
datediff(d, @StartDate, dateadd(m, datediff(m, 0, @StartDate)+ 1, 0)) +
datediff(d, dateadd(m, datediff(m, 0, @EndDate), 0), @EndDate) + 1
END as remainingdays,
CASE timetype
WHEN 'days'
THEN datediff(d, @StartDate, @EndDate)
WHEN 'weeks'
THEN weeks
WHEN 'months'
THEN
datediff(m, dateadd(d, -1, @StartDate), dateadd(d, 1, @EndDate)) - 1
END as diff,
timetype
FROM
(SELECT CASE WHEN datediff(d, @StartDate, @EndDate) between 0 and 30 THEN 'days'
WHEN datediff(d, @StartDate, @EndDate) < 90 THEN 'weeks'
WHEN datediff(d, @StartDate, @EndDate) >= 90 THEN 'months' END timetype,
datediff(week, dateadd(d, datediff(d, 1, @StartDate) / 7 * 7, 7),
dateadd(d, datediff(d, -1, @EndDate) / 7 * 7, 0)) weeks
) x