как найти конец квартала с учетом даты в квартале - PullRequest
0 голосов
/ 07 января 2011

Если мне дали дату (скажем, @d = '11 -25-2010 '), как я могу определить конец квартала с этой даты. Я хотел бы использовать метку времени за одну секунду до полуночи.

Я могу получить это:

select dateadd(qq, datediff(qq, 0, getdate()), 0) as quarterStart

, что дает мне: '10 -1-2010 '

и я использую это за одну секунду до полуночи данного дня:

select DateAdd(second, -1, DateAdd(day, DateDiff(day, 0, @d))+1, 0) ) AS DayEnd

в конце концов, метод четверть-конца даст мне '12 -31-2010 23: 59: 00 '

Ответы [ 5 ]

2 голосов
/ 07 января 2011
2 голосов
/ 07 января 2011

Мне кажется, я понял:

select DateAdd(second, -1, DateAdd(qq, DateDiff(qq, 0, getdatE())+1, 0) ) 
1 голос
/ 07 января 2011
Select Dateadd(qq, datediff(qq, 0, getdate()), 0) as QuarterStart
    , DateAdd(d, -1
        , DateAdd(qq, 1
            , dateadd(qq, datediff(qq, 0, getdate()), 0))) As QuarterEnd

Просто найдите первый день следующего квартала и вычтите день. Если вы используете это для диапазона, то используйте «строго меньше чем» и не вычитайте день:

MyDate >= Dateadd(qq, datediff(qq, 0, getdate()), 0)
And MyDate < DateAdd(qq, 1
                , dateadd(qq, datediff(qq, 0, getdate()), 0))
0 голосов
/ 07 января 2011

Очень многословно для ясности.В основном это прямой подход:

  • Получить год
  • Рассчитать квартальный месяц, учитывая, что в квартале есть 3 месяца
  • Корректировать год для 4-го квартала
  • Скомпилируйте вывод

Так вот код:

declare @current datetime
set @current = '9-25-2010'

declare @year int
set @year = datepart(year, @current)

declare @quartermonth int
select @quartermonth = ((datepart(month, @current) - 1)/ 3 + 1)* 3 + 1 -- go to the next month

select @year, @quartermonth

-- adjust year if it's 4th quater
select @year = @year + @quartermonth / 12

-- avoid month overflow
select @quartermonth = @quartermonth % 12

select @year, @quartermonth


declare @firstdayofnextquater datetime
select @firstdayofnextquater = convert(datetime, convert(varchar, @year) + '-' + convert(varchar, @quartermonth) + '-01')

select dateadd(second, -1, @firstdayofnextquater)
0 голосов
/ 07 января 2011

Попробуйте это

select dateadd(second,-1,
         dateadd(month,3,
           dateadd(qq, datediff( quarter , 0 , current_timestamp ) ,
             0
             )
           )
         )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...