8

我有 3 列 1. dd/mm/yyyy(存储为字符串) 2. app_id 和 #downloads 的应用

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

谢谢

4

3 回答 3

23

使用标准 SQL 甚至更短:

SELECT TIMESTAMP(PARSE_DATE('%d/%m/%Y','23/03/2015'))
于 2017-02-08T05:50:24.403 回答
11

您可以使用以下内容将 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)
)

将它们转换为时间戳后,您可能会发现日期和时间函数很有用,具体取决于您要执行的操作。

于 2015-03-12T20:38:11.250 回答
4

用 REGEXP_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)
于 2016-04-26T11:43:04.617 回答