Datetime 如何将dd/mm/yyyy字符串转换为BigQuery中的日期?

Datetime 如何将dd/mm/yyyy字符串转换为BigQuery中的日期?,datetime,casting,google-bigquery,string-to-datetime,Datetime,Casting,Google Bigquery,String To Datetime,我有三个专栏 1.dd/mm/yyyy(存储为字符串) 2.应用程序id和应用程序下载 我必须在一周内找到下载的应用程序的唯一ID 谢谢您可以使用类似以下内容将dd/MM/yyyy字符串转换为BigQuery时间戳: SELECT TIMESTAMP(year + '-' + month + '-' + day) as output_timestamp FROM ( SELECT REGEXP_EXTRACT(input_date, '.*/([0-9]{4})$') as yea

我有三个专栏 1.dd/mm/yyyy(存储为字符串) 2.应用程序id和应用程序下载

我必须在一周内找到下载的应用程序的唯一ID


谢谢

您可以使用类似以下内容将dd/MM/yyyy字符串转换为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)
)

一旦您将它们转换为时间戳,您可能会发现它们很有用,具体取决于您尝试执行的操作。

使用REGEXP\u REPLACE缩短时间:

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

非前导零日期的更新版本:

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

使用标准SQL甚至更短:

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

通过先转换为时间戳,这难道不会有丢失1970年之前日期的风险吗?这不是时间戳的限制吗?根据我们的文档,时间戳实际上支持从1年到9999年。虽然这些文档用于标准SQL,但遗留的SQL时间戳也支持相同的范围。
PARSE_DATE
不是一个BigQuery函数是的,它确实可以工作,非常感谢,但是我不知道为什么PARSE_DATE不会出现在BigQuery Mate pluginPARSE_创建的intellisense列表中。DATE肯定是一个BigQuery函数-