您好SOF社区:
我有一张这样的表
InvoicingActivityStartDay InvoicingActivityEndDay
27 26
27 26
01 NULL --NULL MEANS LAST DAY OF MONTH
01 NULL
15 14
我需要一个T-SQL查询,在给定当前日期的情况下,将为上面的数据返回以下内容。如果当前日期= 2012年1月12日,结果应如下所示
InvoicingActivityStartDATE InvoicingActivityEndDATE
27-DEC-2011 12:00:00.000 26-JAN-2012 23:59:99.999
27-DEC-2011 12:00:00.000 26-JAN-2012 23:59:99.999
01-DEC-2011 12:00:00.000 31-DEC-2011 23:59:99.999
01-DEC-2011 12:00:00.000 31-DEC-2011 23:59:99.999
15-DEC-2011 12:00:00.000 14-JAN-2012 23:59:99.999
您能否告诉我如何在一次查询中完成此操作?
请注意,如果开始日期为1,则表示结束日期始终是上个月的最后一天。
答案 0 :(得分:2)
如果我正确地解释了您的要求(开始日是上个月的那天,结束日是本月的那一天;除非开始日是1),那么您可能想要这样的事情(假设您的开始/结束日期是整数;如果不是,则将它们作为整数投射:)
SELECT DATEADD(DAY,InvoicingActivityStartDay-1,
DATEADD(Month,DATEDIFF(Month,0,GETDATE())-1,0))
AS [InvoicingActivityStartDATE]
,CASE InvoicingActivityStartDay
WHEN 1 THEN DATEADD(ms,-3,
DATEADD(Month,DATEDIFF(Month,0,GETDATE()),0))
ELSE DATEADD(ms,-3,
DATEADD(DAY,InvoicingActivityEndDay,
DATEADD(Month,DATEDIFF(Month,0,GETDATE()),0)))
END AS [InvoicingActivityEndDATE]
FROM t