2015-03-12 16 views

Odpowiedz

10

można przekonwertować dd/mm/rrrr struny do znaczników czasu BigQuery używając coś jak następuje:

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) 
) 

Po dokonaniu konwersji ich do znaczników czasu, można znaleźć date and time functions użyteczne , w zależności od tego, co próbujesz zrobić.

+0

dziękuję, działa dobrze :) –

+0

Po konwersji na TIMESTAMP pierwszy, czy nie ma to ryzyka utraty dat przed rokiem 1970? Czy to nie limit TIMESTAMP? – Praxiteles

+0

TIMESTAMP faktycznie obsługuje lata od 1 do 9999, według naszych dokumentów: https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#timestamp-type. Chociaż te dokumenty są dla standardowego SQL, starsze znaczniki czasu SQL również obsługują ten sam zakres. –

5

Krótszy z REGEXP_REPLACE:

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

EDIT

Zaktualizowana wersja dla non-zerem terminach:

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

Nawet krótszy przy użyciu standardowego SQL:

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

'PARSE_DATE' nie jest funkcją BigQuery – daVe

+0

Jest - z #standardSQL. http://i.imgur.com/g7xP653.png –

+0

Dzięki, tak, to działa przy użyciu standardSQL !!! – zhihong