Рассчитать последний день предыдущего квартала

Как наиболее эффективно рассчитать последний день предыдущего квартала?

Пример: учитывая дату 19.11.2008, я хочу вернуть 30.09.2008.

Платформа - это SQL Server

Каков желаемый результат на «30.09.2008»? «30.06.2008»?

TToni 19.11.2008 19:31

да, и для захвата всех лимитов: 01.10.2008 должно быть 30.09.2008

Bob Probst 19.11.2008 19:36
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
7
2
34 009
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Я придумал это (проверено за все месяцы):

select dateadd(dd,-1,dateadd(qq,datediff(qq,0,'11/19/2008'),0)),
       dateadd(dd,-1,dateadd(qq,datediff(qq,0,'10/19/2008'),0)),
       dateadd(dd,-1,dateadd(qq,datediff(qq,0,'12/19/2008'),0))

Это могло оказаться самым простым.

Ответ принят как подходящий

Если @Date имеет дату, о которой идет речь

Select DateAdd(day, -1, dateadd(qq, DateDiff(qq, 0, @Date), 0)) 

Обновлено: Благодаря @strEagle ниже все еще проще:

Select dateadd(qq, DateDiff(qq, 0, @Date), -1) 

Я думал в том же духе, но я не знал о битах «qq». Делает вещи намного проще ...

TToni 19.11.2008 20:25

На самом деле проще:

SELECT DATEADD(qq, DATEDIFF(qq, 0, GETDATE()), -1)

Получить текущую дату

SELECT CONVERT(DATE,GETDATE()) [Current Date]

Получить 1-е число квартала на текущую дату

SELECT CONVERT(DATE, DATEADD(QQ, DATEDIFF(QQ, 0, GETDATE())  ,0)) [Current Quarter 1st Date]

Получить последнюю дату квартала для текущей даты

SELECT CONVERT(DATE,DATEADD(d, -1, DATEADD(q, DATEDIFF(q, 0, GETDATE()) +1, 0))) [Current Quarter Last Date]

Получить 1-е число следующего квартала на текущую дату

SELECT CONVERT(DATE, DATEADD(QQ, DATEDIFF(QQ, 0, GETDATE()) +1 ,0)) [Next Quarter 1st Date]

Получить последнюю дату следующего квартала для текущей даты

SELECT CONVERT(DATE,DATEADD(d, -1, DATEADD(q, DATEDIFF(q, 0, GETDATE()) +2, 0))) [Next Quarter Last Date]

Я думаю, было бы здорово, если бы вы могли объяснить, что вы сделали. Тогда больше людей смогут понять, что вы предложили.

jazzurro 22.10.2014 09:34

В красном смещении амазонки:

Последний день предыдущего квартала:

select dateadd(day,-1,DATE_TRUNC('qtr', current_date)) from whatever

Последний день текущего квартала:

select dateadd(qtr,1,dateadd(day,-1,DATE_TRUNC('qtr', current_date))) from whatever

Платформа - SQL Server. DATE_TRUNC не поддерживается.

strickt01 12.04.2016 19:15
convert(varchar, dateadd(dd,-1,dateadd(qq,1,DATEADD(qq, DATEDIFF(qq,0,YOUR_DATE), 0))),112)

вы также можете изменить базу 112 в этом списке ниже

SELECT convert(varchar, getdate(), 100) -- mon dd yyyy hh:mmAM (or PM)
                                        -- Oct  2 2008 11:01AM
SELECT convert(varchar, getdate(), 101) -- mm/dd/yyyy - 10/02/2008                  
SELECT convert(varchar, getdate(), 102) -- yyyy.mm.dd – 2008.10.02           
SELECT convert(varchar, getdate(), 103) -- dd/mm/yyyy
SELECT convert(varchar, getdate(), 104) -- dd.mm.yyyy
SELECT convert(varchar, getdate(), 105) -- dd-mm-yyyy
SELECT convert(varchar, getdate(), 106) -- dd mon yyyy
SELECT convert(varchar, getdate(), 107) -- mon dd, yyyy
SELECT convert(varchar, getdate(), 108) --  hh:mm:ss
SELECT convert(varchar, getdate(), 109) -- mon dd yyyy hh:mm:ss:mmmAM (or PM)
                                        -- Oct  2 2008 11:02:44:013AM   
SELECT convert(varchar, getdate(), 110) -- mm-dd-yyyy
SELECT convert(varchar, getdate(), 111) -- yyyy/mm/dd
SELECT convert(varchar, getdate(), 112) -- yyyymmdd
SELECT convert(varchar, getdate(), 113) -- dd mon yyyy hh:mm:ss:mmm
                                        --  02 Oct 2008 11:02:07:577     
SELECT convert(varchar, getdate(), 114) -- hh:mm:ss:mmm(24h)
SELECT convert(varchar, getdate(), 120) -- yyyy-mm-dd hh:mm:ss(24h)
SELECT convert(varchar, getdate(), 121) --  yyyy-mm-dd hh:mm:ss.mmm
SELECT convert(varchar, getdate(), 126) -- yyyy-mm-ddThh:mm:ss.mmm
                                        --  2008-10-02T10:52:47.513
-- SQL create different date styles with t-sql string functions
SELECT replace(convert(varchar, getdate(), 111), '/', ' ') -- yyyy mm dd
SELECT convert(varchar(7), getdate(), 126)                 -- yyyy-mm
SELECT right(convert(varchar, getdate(), 106), 8)          -- mon yyyy

Вопрос не в преобразовании в VARCHAR никоим образом, а в том, чтобы получить дату окончания квартала.

TT. 24.10.2017 10:35

yaya, я знаю, но я думаю, что со мной будет кто-то такой же. Они также хотят получить последнюю дату квартала в формате ггггммдд. Спасибо

ManhNguyen 24.10.2017 11:47

Другие вопросы по теме