CAST as TIMESTAMP не работает для некоторых форматов строк - PullRequest
0 голосов
/ 14 июня 2019

У меня есть поле в таблице BigQuery, которое является STRING, но на самом деле является отметкой времени в формате "2019-06-14T11: 31: 07".Поэтому я использую CAST (sign_up_date AS TIMESTAMP) для преобразования в пригодный для использования TIMESTAMP.

Это отлично работает в Legacy SQL, однако в Standard SQL выдает ошибки, когда STRING имеет формат "2019-06-14T09: 09 "(в точную минуту, пропущено": 00 ") или" 2019-05-25T05: 31: 22.7263555 "(так как иногда они появляются с десятичными секундами).

Любая идея окак я могу заставить его работать в стандартном SQL?Очевидно, что я мог бы просто использовать Legacy SQL, но я хочу написать в Standard, так как есть другие функции, которые работают лучше в этом.

Спасибо,

Benji

1 Ответ

3 голосов
/ 14 июня 2019

Ниже приведен пример для BigQuery Standard SQL

#standardSQL
WITH `project.dataset.table` AS (
  SELECT "2019-06-14T11:31:07" sign_up_date UNION ALL
  SELECT "2019-05-25T05:31:22.7263555" UNION ALL
  SELECT "2019-06-14T09:09"
)
SELECT sign_up_date, 
  COALESCE(
    SAFE.PARSE_TIMESTAMP('%FT%R', sign_up_date),
    SAFE.PARSE_TIMESTAMP('%FT%R:%E*S', sign_up_date)  
  ) AS sign_up_date_as_timestamp  
FROM `project.dataset.table`   

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

Row sign_up_date                sign_up_date_as_timestamp    
1   2019-06-14T11:31:07         2019-06-14 11:31:07 UTC  
2   2019-05-25T05:31:22.7263555 2019-05-25 05:31:22.726355 UTC   
3   2019-06-14T09:09            2019-06-14 09:09:00 UTC    

Как вы можете видеть, это охватит все три шаблона, представленные в вашем вопросе.
Есливы найдете больше - вы можете добавить соответствующий SAFE.PARSE_TIMESTAMP в COALESCE

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...