Как преобразовать дату и время в дату в Google Bigquery с использованием стандартного SQL или как извлечь год в выражении where из даты и времени? - PullRequest
0 голосов
/ 25 февраля 2020

В настоящее время у меня есть поле даты и времени, по которому мне нужно отфильтровать свое утверждение WHERE, особенно для 2019 и 2020 годов. Если у меня просто есть поле даты без времени, я знаю, что могу использовать:

WHERE extract(year from cast([field name] as date))> 2018 

чтобы извлечь год например.

Из-за этого мне нужна одна из двух вещей:

  1. Мне нужно либо преобразовать поле даты и времени в дату, чтобы я мог использовать приведенный выше фрагмент sql, ИЛИ

  2. Мне нужен оператор WHERE, содержащий поле даты и времени, которое позволяет мне видеть только данные> года 2018.

Чтобы преобразовать дату и время в На сегодняшний день я попробовал функции convert и left, в дополнение к большинству интерактивных решений, которые, к сожалению, не сработали для меня.

Вот пример текущего формата даты и времени: «2018-08-22 02:48:56»

Заранее благодарен за любую помощь!

Вот изображение ошибки, которую я получаю при извлечении

Ответы [ 2 ]

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

Почему бы просто не использовать это?

WHERE col >= datetime('2019-01-01')

или:

WHERE col >= datetime('2019-01-01') and col < datetime('2021-01-01')

Если вы сохраняете значение в виде строки, вам повезло, потому что вы можете просто использовать строку сравнения:

WHERE col >= '2019-01-01' and col < '2021-01-01'

Однако я бы посоветовал вам загрузить данные, используя правильный тип данных.

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

Я бы не рекомендовал применять функции даты к фильтруемому столбцу, поскольку это требует больше работы для вашей базы данных (каждое значение в кумуне должно быть преобразовано перед сравнением) и не позволяет базе данных использовать преимущества существующего индекса.

Вместо этого вы можете сравнить столбец datetime с литералом, например:

where mydatetimecol >= datetime(2019, 1, 1, 0, 0, 0)

Если у вас есть даты в будущем, то вы можете использовать полуоткрытый интервал для выполните проверку:

where 
    mydatetimecol >= datetime(2019, 1, 1, 0, 0, 0)
    and mydatetimecol < datetime(2021, 1, 1, 0, 0, 0)

Похоже, вы храните даты в виде строк в формате YYYY-MM-DD HH:MI:SS. Если это так, вы можете вместо этого выполнить сравнение строк (поскольку, к счастью, этот формат позволяет это):

where 
    mydatetimecol >= '2019-01-01 00:00:00'
    and mydatetimecol < '2021-01-01 00:00:00'
...