根据当前日期仅从天(1,2,3..31) 派生日期

发布于 2024-12-21 00:07:54 字数 877 浏览 1 评论 0原文

你好 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,则意味着结束日始终是上个月的最后一天。

Hello SOF community:

I have a table like this

 InvoicingActivityStartDay InvoicingActivityEndDay
 27                        26
 27                        26
 01                        NULL --NULL MEANS LAST DAY OF MONTH
 01                        NULL
 15                        14    

I need a T-SQL query that will return the following for the data above, given the current date; if current date = 12-JAN-2012, the results should be as below

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

Can you please show me how this be done in a single query?

Please note that if the start day is 1, that means the end day is always the last day of the previous month.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

怪我鬧 2024-12-28 00:07:54

如果我正确解释您的要求(开始日期是上个月的那一天,结束日期是本月的那一天;除非开始日期为 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

If I interpret your requirements correctly (that the start day is that day of last month, and the end day is that day of this month; except when start day is 1), then you may want something like this (assuming your start/end days are integers; if not, cast them as ints):

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文