BigQuery конвертировать строку в дату - PullRequest
0 голосов
/ 19 апреля 2019

В моем наборе данных был создан один столбец с именем timestamp с типом данных как String .

Содержит такие значения, как:

2018-05-30T12: 56: 27: 487 + 0200

Я хочу построить запрос, в котором я могу получить все столбцы из таблицы набора данных на основе даты в формате 'ГГГГ-ММ-ДД' .

Я хочу использовать его в предложении where с диапазоном DATE.

Можете ли вы вести?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 19 апреля 2019

конвертировать строку в дату

Ниже приведен пример для 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))))
0 голосов
/ 19 апреля 2019

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

select PARSE_DATE('%Y-%m-%d', SUBSTR('2018-05-30T12:56:27:487+0200', 1, 10))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...