конвертировать строку в дату
Ниже приведен пример для BigQuery Standard SQL
#standardSQL
WITH `project.dataset.table` AS (
SELECT '2018-05-30T12:56:27.487+0200' ts UNION ALL
SELECT '2018-05-30T01:56:27.487+0200'
)
SELECT ts AS ts_as_string,
PARSE_TIMESTAMP('%FT%H:%M:%E3S%z', ts) ts_as_timestamp,
DATE(PARSE_TIMESTAMP('%FT%H:%M:%E3S%z', ts)) ts_as_date
FROM `project.dataset.table`
с результатом
ts_as_string ts_as_timestamp ts_as_date
2018-05-30T12:56:27.487+0200 2018-05-30 10:56:27.487 UTC 2018-05-30
2018-05-30T01:56:27.487+0200 2018-05-29 23:56:27.487 UTC 2018-05-29
Как вы можете видеть - сначала я анализирую метку времени из строки - это важная часть - именно здесь вы можете принять во внимание часовой пояс (см. Разницу в датах в результате 2018-05-29
против 2018-05-29
). Тогда вы можете получить Дата вне TIMESTAMP
Я хочу использовать его в предложении where с диапазоном DATE.
Итак, теперь вы можете использовать ниже в вашем предложении WHERE
WHERE DATE(PARSE_TIMESTAMP('%FT%H:%M:%E3S%z', ts)) BETWEEN date1 AND date2
Обновление
Вы можете использовать ниже, чтобы избежать "неправильного" формата
PARSE_DATE('%F', SUBSTR(ts, 1, 10))
В случае, если вам нужно учесть часовой пояс - вы можете использовать ниже (который устанавливает :
в .
перед применением PARSE_TIMESTAMP)
DATE(PARSE_TIMESTAMP('%FT%H:%M:%E3S%z', FORMAT('%s.%s', SUBSTR(ts, 1, 19), SUBSTR(ts, 21, 8))))