Есть строковое поле, которое имеет «(UT C -03: 00) - Santia go», чтобы извлечь время -03: 00 и преобразовать его в секунды в BigQuery - PullRequest
0 голосов
/ 19 марта 2020

У меня есть значения, как показано ниже, в строковом поле " timezone_name "

(UT C -03: 00) - Сантьяго (UT C -04: 00) Атланти c Время (Канада) (UTC + 05: 30) Ченнаи, Калькутта, Мумбаи, Нью-Дели (UT C)

Я могу извлечь значения -03: 00, -04: 00, + 05:30 используя следующий код:

CASE WHEN STRPOS (timezone_name, "+") = 5 THEN SUBSTR (timezone_name, 5,6) WHEN STRPOS (timezone_name, "-") = 5 THEN SUBSTR (timezone_name, 5,6) ELSE '0'

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

Ожидаемый результат - преобразование этого значения времени в секунды, например, 05:30 следует преобразовать в 19800, -04: 00 следует преобразовать в -14400

1 Ответ

1 голос
/ 19 марта 2020

Ниже для BigQuery Standard SQL

#standardSQL
SELECT timezone_name, 
  CASE REGEXP_EXTRACT(timezone_name, r'UTC([+-])') 
    WHEN '-' THEN -1
    ELSE 1 
  END * TIME_DIFF(
    CAST(CONCAT(REGEXP_EXTRACT(timezone_name, r'UTC[+-]([:0-9]*)'), ':00') AS TIME), 
    '00:00:00', 
    SECOND
  ) AS offset_in_seconds
FROM `project.dataset.table`   

Если применить к образцу данных в вашем вопросе - вывод

Row timezone_name                                       offset_in_seconds    
1   (UTC-03:00) - Santiago                              -10800   
2   (UTC-04:00) Atlantic Time (Canada)                  -14400   
3   (UTC+05:30) Chennai, Kolkata, Mumbai, New Delhi     19800    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...