BigQuery中如何将DATETIME类型日期格式化为月日短字符串
BigQuery 周字段格式化实现方案
直接使用BigQuery内置日期格式化函数即可实现需求,核心逻辑如下:
- 用
FORMAT_DATE函数做字符串格式化,对应格式串"%b %d"即可输出「三位月份缩写+两位日期」的结果:%b:返回对应日期的三位英文月份缩写,例如2月对应Feb、3月对应Mar%d:返回补零的两位日期数值,例如2号对应02、22号对应22
- 由于
DATE_TRUNC作用在DATETIME/TIMESTAMP类型字段时返回值不是DATE类型,需要套一层DATE()做类型转换,避免函数入参类型报错 - BigQuery支持SELECT中定义的列别名直接在GROUP BY中引用,可以简化重复书写的截断逻辑
修改后可直接运行的SQL如下:
SELECT FORMAT_DATE("%b %d", DATE(DATE_TRUNC(dd.created, WEEK))) AS week, COUNT(DISTINCT dd.user) AS total, COUNT(dd.upload) AS info FROM local.detail dd LEFT JOIN local.list du ON dd.id = du.id WHERE REGEXP_EXTRACT(du.email, r'@(.+)') != 'gmail.com' GROUP BY week;
额外提示:当前SQL在WHERE子句中过滤右表
du的email字段,会让LEFT JOIN实际退化为INNER JOIN,如果需要保留local.detail中无匹配local.list记录的数据,需要把该过滤条件移动到LEFT JOIN的ON子句中。
内容的提问来源于stack exchange,提问作者Sädnän Møhøsïn
相关产品推荐
相关产品推荐

