2015-03-12 1 views

ответ

10

Вы можете конвертировать ваши дд/мм/гггг строки в BigQuery временные метки, используя что-то вроде следующего:

SELECT TIMESTAMP(year + '-' + month + '-' + day) as output_timestamp 
FROM (
    SELECT 
    REGEXP_EXTRACT(input_date, '.*/([0-9]{4})$') as year, 
    REGEXP_EXTRACT(input_date, '^([0-9]{2}).*') as day, 
    REGEXP_EXTRACT(input_date, '.*/([0-9]{2})/.*') AS month 
    FROM 
    (SELECT '30/10/2015' as input_date), 
    (SELECT '25/01/2015' as input_date) 
) 

После того, как вы превратили их временные метки, вы можете найти date and time functions полезным , в зависимости от того, что вы пытаетесь сделать.

+0

благодарит много, он работает просто отлично :) –

+0

Первым делом превращается в TIMESTAMP, не рискует ли потерять даты до 1970 года? Разве это не предел TIMESTAMP? – Praxiteles

+0

TIMESTAMP фактически поддерживает годы с 1 по 9999, в наших документах: https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#timestamp-type. Хотя эти документы предназначены для стандартного SQL, устаревшие временные метки SQL также поддерживают один и тот же диапазон. –

5

Шортер с regexp_replace:

SELECT ds, 
    TIMESTAMP(REGEXP_REPLACE(ds, r'(..)/(..)/(....)', r'\3-\2-\1')) ts 
FROM (SELECT '23/03/2015' ds) 

EDIT

Обновленная версия для не ведущих нулевых дат:

SELECT ds, 
    TIMESTAMP(REGEXP_REPLACE(ds, r'(.?.)/(..)/(....)', r'\3-\2-\1')) ts 
FROM (SELECT '1/01/2017' ds) 
12

Даже короче, используя стандартный SQL:

SELECT TIMESTAMP(PARSE_DATE('%d/%m/%Y','23/03/2015')) 
+1

'PARSE_DATE' не является функцией BigQuery – daVe

+0

Это - с #standardSQL. http://i.imgur.com/g7xP653.png –

+0

Спасибо, да, он работает с использованием стандартного SQL! – zhihong