Производные даты только с дня (1,2,3..31), основанные на текущей дате - PullRequest
0 голосов
/ 13 декабря 2011

Привет сообщество SOF:

У меня есть такая таблица

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

Мне нужен запрос T-SQL, который вернет следующее для данных выше, учитывая текущую дату; если текущая дата = 12 января 2012 года, результаты должны быть такими, как показано ниже

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 голосов
/ 13 декабря 2011

Если я правильно истолковываю ваши требования (что начальный день - это день прошлого месяца, а конечный день - это день этого месяца; кроме случаев, когда начальный день равен 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
...