Дата SQL до 31 августа - PullRequest
       0

Дата SQL до 31 августа

1 голос
/ 25 февраля 2020

Я пытаюсь получить последний 31 августа каждый год динамически. Например, если текущая дата сегодня, я хотел бы получить 31 августа 2019 года в следующем году, и я хочу, чтобы это было динамически c и 31 августа 2020 года?

Я пробовал Date_Sub и Date_Trunc и они не работают. Какие-нибудь идеи были бы действительно полезны?

SELECT DATE_SUB(current_date(), INTERVAL 5 DAY) as five_days_ago 

Ответы [ 2 ]

1 голос
/ 25 февраля 2020

Ниже всегда будет возвращаться последний / последний 31 августа

#standardSQL
SELECT IF(CURRENT_DATE() < last_august_31, DATE_SUB(last_august_31, INTERVAL 1 YEAR), last_august_31) AS last_august_31 
FROM UNNEST([DATE(EXTRACT(YEAR FROM CURRENT_DATE()), 8, 31)]) last_august_31  

Если вам нужно использовать это в запросе с полем даты - рассмотрите пример ниже

#standardSQL
WITH `project.dataset.table` AS (
  SELECT DATE '2019-01-01'dt UNION ALL 
  SELECT '2019-12-31' UNION ALL 
  SELECT CURRENT_DATE()
)
SELECT dt, IF(dt < last_august_31, DATE_SUB(last_august_31, INTERVAL 1 YEAR), last_august_31) AS last_august_31 
FROM `project.dataset.table`,
UNNEST([DATE(EXTRACT(YEAR FROM dt), 8, 31)]) last_august_31
-- ORDER BY dt

с результатом

Row dt          last_august_31   
1   2019-01-01  2018-08-31   
2   2019-12-31  2019-08-31   
3   2020-02-25  2019-08-31   
0 голосов
/ 25 февраля 2020
with dates as (
  select cast('2019-01-01' as date) as my_date union all select '2019-12-31' union all select current_date()
)

select
  my_date,
  date(extract(year from my_date) - case when extract(month from my_date) < 9 then 1 else 0 end, 8, 31) as prev_aug_31,
  date(extract(year from my_date) + case when extract(month from my_date) >= 9 then 1 else 0 end, 8, 31) as next_aug_31
from dates
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...