根据当前日期仅从日(1,2,3..31)获取日期

时间:2011-12-12 22:07:19

标签: sql-server-2008 tsql datetime select date-range

您好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,则表示结束日期始终是上个月的最后一天。

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