我试图在 SQL 中将字符串转换为时间戳。问题其实很简单,如何将这个字符串转换成当天午夜开始的时间戳?
在我的数据库中,我还在 timestamp_micros
中存储了一个字段,其中任何一个都可以工作,我认为将 micros 转换为时间戳比字符串更容易。
例如
20170118 => 时间戳
查询:
WITH allTables as (
SELECT
event.date as date,
count(*) as totalSessions,
count(DISTINCT user_dim.app_info.app_instance_id) as uniqueUsers
FROM `namehiddenonlyhere.*`
CROSS JOIN
UNNEST(event_dim) AS event
WHERE
event.name = 'session_start'
AND
event.date <= FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY))
AND
event.date >= FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 7 DAY))
GROUP BY event.date
UNION ALL
SELECT
event.date as date,
count(*) as totalSessions,
count(DISTINCT user_dim.app_info.app_instance_id) as uniqueUsers
FROM `namehiddenonlyhere.*`
CROSS JOIN
UNNEST(event_dim) AS event
WHERE
event.name = 'session_start'
AND
event.date <= FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY))
AND
event.date >= FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 7 DAY))
GROUP BY event.date
) SELECT 'all apps' as target, date as datapoint_time, totalSessions datapoint_value FROM allTables;
最佳答案
您可以使用 PARSE_DATE
或 PARSE_TIMESTAMP
(格式字符串相同)来获取日期或时间戳。例如:
SELECT
d,
PARSE_DATE('%Y%m%d', d) AS date,
PARSE_TIMESTAMP('%Y%m%d', d) AS timestamp
FROM UNNEST(['20170117', '20161231']) AS d;
您可以在文档中阅读有关格式字符串的更多信息。有 date 的部分和 timestamp ,分别适用于 PARSE_DATE
和 PARSE_TIMESTAMP
。
编辑:根据您更新的问题,您可以将查询更改为如下内容:
WITH allTables as (
SELECT
event.date as date,
count(*) as totalSessions,
count(DISTINCT user_dim.app_info.app_instance_id) as uniqueUsers
FROM `namehiddenonlyhere.*`
CROSS JOIN
UNNEST(event_dim) AS event
WHERE
event.name = 'session_start'
AND
event.date <= FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY))
AND
event.date >= FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 7 DAY))
GROUP BY event.date
UNION ALL
SELECT
event.date as date,
count(*) as totalSessions,
count(DISTINCT user_dim.app_info.app_instance_id) as uniqueUsers
FROM `namehiddenonlyhere.*`
CROSS JOIN
UNNEST(event_dim) AS event
WHERE
event.name = 'session_start'
AND
event.date <= FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY))
AND
event.date >= FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 7 DAY))
GROUP BY event.date
) SELECT 'all apps' as target, PARSE_DATE('%Y%m%d', date) as datapoint_time, totalSessions datapoint_value FROM allTables;
我所做的唯一修改是更改:
date AS datapoint_time
到:
PARSE_DATE('%Y%m%d', date) as datapoint_time
关于SQL 将 yyyymmdd 转换为 BigQuery 中的时间戳?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41724089/