2015-03-12 13 views

Trả lời

10

Bạn có thể chuyển đổi chuỗi dd của bạn/MM/yyyy vào timestamps BigQuery sử dụng giống như sau:

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

Một khi bạn đã chuyển đổi chúng để timestamps, bạn có thể tìm thấy những date and time functions hữu ích , tùy thuộc vào những gì bạn đang cố gắng làm.

+0

cảm ơn rất nhiều, nó hoạt động tốt :) –

+0

Bằng cách chuyển đổi thành TIMESTAMP trước, điều này có nguy cơ mất ngày trước năm 1970 không? Đó không phải là giới hạn của TIMESTAMP phải không? – Praxiteles

+0

Dấu thời gian thực sự hỗ trợ từ năm 1 đến 9999, theo tài liệu của chúng tôi: https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#timestamp-type. Mặc dù các tài liệu này dành cho SQL chuẩn, nhưng dấu thời gian SQL cũ cũng hỗ trợ cùng một phạm vi. –

5

ngắn với REGEXP_REPLACE:

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

EDIT

phiên bản cập nhật cho phi hàng đầu zero ngày:

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

Thậm chí ngắn hơn sử dụng SQL tiêu chuẩn:

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

'PARSE_DATE' không phải là hàm BigQuery – daVe

+0

Đó là - với #standardSQL. http://i.imgur.com/g7xP653.png –

+0

Cảm ơn, vâng, nó hoạt động bằng cách sử dụng standardSQL !!! – zhihong

Các vấn đề liên quan