mam 3 kolumny 1. dd/mm/rrrr (przechowywane jako ciąg) 2. APP_ID i #downloads z aplikacjamiJak rzutować ciąg dd/mm/yyyy na datę w BigQuery?
muszę znaleźć unikalne identyfikatory aplikacji pobranych w ciągu tygodnia.
Dziękuję
mam 3 kolumny 1. dd/mm/rrrr (przechowywane jako ciąg) 2. APP_ID i #downloads z aplikacjamiJak rzutować ciąg dd/mm/yyyy na datę w BigQuery?
muszę znaleźć unikalne identyfikatory aplikacji pobranych w ciągu tygodnia.
Dziękuję
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ć.
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)
dziękuję, działa dobrze :) –
Po konwersji na TIMESTAMP pierwszy, czy nie ma to ryzyka utraty dat przed rokiem 1970? Czy to nie limit TIMESTAMP? – Praxiteles
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. –