Sql server 2008 基于当前日期,仅从第(1,2,3..31)天导出日期

Sql server 2008 基于当前日期,仅从第(1,2,3..31)天导出日期,sql-server-2008,tsql,datetime,select,date-range,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

你好,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),则您可能需要类似的内容(假设开始/结束日期为整数;如果不是,则将其转换为整数):


是否规定开始日期应解释为上个月的那一天?需要更多信息。如果第一列=2,您会得到Dec2-Jan2还是Jan2-Feb2?或者,返回的范围何时包括CURRENTDATE,何时不包括CURRENTDATE?还有,第二列是什么?您不需要在下一列中第一列的前一天通过
就可以了吗月
根据提供的月1日的特殊规则进行修改?该表保存相对于当前日期的值。如果开票开始日期为1,则开票结束日期始终为月底;如果开票开始日期不是1,则明确提及结束日期。例如,今天是2011年12月13日。当我今天运行查询时,对于起始日期为1的行,它应该返回2011年11月1日2011年11月30日(格式不重要)。如果起始日期为27,那么今天运行的查询应该返回2011年11月27日和2011年12月26日。我可以使用C#扩展方法来实现这一点。但只需探索是否可以在SQL中完成。谢谢。
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