BigQuery中DATE转数值失败,如何统计log_work_started列天数?
解决BigQuery中DATE类型转数值报错及统计日期天数的问题
报错原因
BigQuery不支持直接将DATE类型强制转换为FLOAT64,因为DATE是专门的日期类型,与浮点型的逻辑不兼容,所以CAST(Log_Work_started AS FLOAT64)会触发Invalid cast from DATE to FLOAT64错误。
针对“统计log_work_started列的天数”的解决方案
根据不同的统计需求,提供以下两种常见实现方式:
1. 统计列中不重复的日期总数
如果要统计该列里有多少个不同的日期(即有多少天存在记录),无需转换类型,直接用COUNT(DISTINCT)即可:
SELECT COUNT(DISTINCT Log_Work_started) AS unique_work_days FROM `data_mkt.marketing_jira` WHERE Log_Work_started BETWEEN "2023-04-01" AND "2023-04-30"
2. 按日期分组统计每日记录数
如果需要查看每个日期对应的记录数量,按日期分组后计数:
SELECT Log_Work_started AS work_date, COUNT(*) AS daily_record_count FROM `data_mkt.marketing_jira` WHERE Log_Work_started BETWEEN "2023-04-01" AND "2023-04-30" GROUP BY Log_Work_started ORDER BY work_date
若确实需要将DATE转为数值类型
如果后续需要基于日期做数值计算(比如日期差),可以用UNIX_DATE()函数将DATE转为整数(返回从1970-01-01到目标日期的天数),示例:
SELECT Log_Work_started AS work_date, UNIX_DATE(Log_Work_started) AS date_numeric_value FROM `data_mkt.marketing_jira` WHERE Log_Work_started BETWEEN "2023-04-01" AND "2023-04-30"
转换后的数值可以直接用于加减等计算,比如计算两个日期之间的天数差,只需将对应的date_numeric_value相减即可。
内容的提问来源于stack exchange,提问作者Rick
相关产品推荐
相关产品推荐

