Стандартное функционирование даты SQL - PullRequest
0 голосов
/ 08 января 2019

Я пытаюсь перейти на Standard SQL и прочитать некоторые документы о функциях даты, но я все еще немного озадачен тем, как выполнить определенный запрос.

Мой текущий устаревший SQL-запрос приведен ниже:

legacySQL

select
date,
round(sum(revenue_total),2) as revenue
from [project:dataset.table]
where month(date) = month(date_add(current_date(),-1,'month'))
group by 1

Как мне преобразовать оператор where в стандартный запрос SQL?

Ответы [ 4 ]

0 голосов
/ 08 января 2019

Я предполагаю, что вы действительно хотите:

where date_trunc(date, 'month') = date_add(date_trunc(current_date), interval -1 month)

Однако то, что вы написали, не учитывает год, поэтому будет:

where extract(month from date) = extract(month from current_date) - 1
0 голосов
/ 08 января 2019

Вы, вероятно, хотите:

WHERE DATE_TRUNC(date, MONTH) = DATE_TRUNC(CURRENT_DATE(), MONTH)

Я подозреваю, что ваш столбец date на самом деле имеет тип TIMESTAMP, и в этом случае вам нужно сначала преобразовать в DATE:

WHERE DATE_TRUNC(EXTRACT(DATE FROM date), MONTH) = DATE_TRUNC(CURRENT_DATE(), MONTH)

Обратите внимание, что функция EXTRACT имеет необязательное предложение AT TIME ZONE, которое позволяет указать часовой пояс, который следует использовать, если вы не хотите использовать значение по умолчанию, то есть UTC. Для получения дополнительной информации см. Документацию по отметке времени .

0 голосов
/ 08 января 2019

Следуйте примеру, используя публичный репозиторий GitHub:

SELECT
  CAST(committer.date AS DATE),
  COUNT(*)
FROM
  `bigquery-public-data.github_repos.commits`
WHERE
  EXTRACT(MONTH FROM CAST(committer.date AS DATE)) = EXTRACT(MONTH FROM (DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH)))

GROUP BY
  1
LIMIT
  10
0 голосов
/ 08 января 2019

Относительно функций даты под рукой есть эквивалентные функции в стандартном SQL BG

  • МЕСЯЦ () -> ЭКСТРАКТ (): EXTRACT(part FROM date_expression), например,

    EXTRACT(MONTH FROM date)
    
  • date_add() и current_date() все еще доступны.

...