You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

BigQuery中如何将字符串列转换为datetime类型?

解决BigQuery中字符串转Datetime并按星期汇总的问题

BigQuery不支持CONVERT函数(这是SQL Server等数据库的语法),要将你的字符串格式日期转为Datetime类型,需要用BigQuery的PARSE_DATETIME函数,结合匹配你数据格式的格式字符串。

第一步:转换字符串为Datetime

你的日期格式是MM/DD/YYYY HH:MI:SS AM/PM,对应的格式字符串是'%m/%d/%Y %I:%M:%S %p',正确的查询语句如下:

SELECT 
  date_hour,
  -- 转换字符串为Datetime
  PARSE_DATETIME('%m/%d/%Y %I:%M:%S %p', date_hour) AS converted_datetime
FROM `turing-bebop-390023.Fitness_tracker_data.hourly_steps` 
LIMIT 1000

如果担心部分行格式错误导致查询失败,可以用SAFE.PARSE_DATETIME,错误行的转换结果会返回NULL而不是中断查询:

SELECT 
  date_hour,
  SAFE.PARSE_DATETIME('%m/%d/%Y %I:%M:%S %p', date_hour) AS converted_datetime
FROM `turing-bebop-390023.Fitness_tracker_data.hourly_steps` 
LIMIT 1000

第二步:按星期几汇总数据

基于转换后的Datetime,你可以用FORMAT_DATE获取星期几的名称,或者EXTRACT(DAYOFWEEK)获取星期数字,再进行分组汇总。示例如下(假设你要统计每天的记录数,可替换为你需要的汇总字段,比如SUM(steps)):

SELECT
  -- 获取星期几的全名(如Monday、Tuesday),用'%a'可获取缩写(Mon、Tue)
  FORMAT_DATE('%A', DATE(PARSE_DATETIME('%m/%d/%Y %I:%M:%S %p', date_hour))) AS weekday_name,
  COUNT(*) AS record_count
FROM `turing-bebop-390023.Fitness_tracker_data.hourly_steps`
GROUP BY weekday_name
-- 按星期顺序排序(BigQuery中DAYOFWEEK周日=1,周六=7)
ORDER BY EXTRACT(DAYOFWEEK FROM PARSE_DATETIME('%m/%d/%Y %I:%M:%S %p', date_hour))

如果希望按周一到周日的顺序排序,可以调整ORDER BY部分:

ORDER BY 
  CASE EXTRACT(DAYOFWEEK FROM PARSE_DATETIME('%m/%d/%Y %I:%M:%S %p', date_hour))
    WHEN 1 THEN 7
    ELSE EXTRACT(DAYOFWEEK FROM PARSE_DATETIME('%m/%d/%Y %I:%M:%S %p', date_hour)) - 1
  END

内容的提问来源于stack exchange,提问作者Leah Stortvedt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 14:52:51