如何在BigQuery中获取mmm-yy格式的日期值(如Dec-20)
BigQuery 输出
mmm-yy 格式(如"Dec-20")的最佳实现方案 推荐核心实现(原生函数,零额外维护成本)
直接调用BigQuery内置的FORMAT_DATE()函数搭配对应格式掩码就能实现需求,这是目前性能最好、长期维护成本最低的方案——不需要手写月份映射字典,也不需要手动拼接字符串。
两个核心格式掩码和需求的匹配度完全对齐:
%b:输出标准三字母月份缩写,en-US环境下的返回值就是Jan、Feb、Mar……Dec,和示例里的"Dec"格式完全一致%y:输出两位数字的短年份,比如2020年就返回20,正好匹配需求里的两位年份后缀
基础用法代码示例:
-- 针对DATE类型字段直接转换 SELECT FORMAT_DATE('%b-%y', target_date_column) AS formatted_mmm_yy FROM your_table; -- 如果源字段是DATETIME/TIMESTAMP类型,先转换为DATE格式再做格式化 SELECT FORMAT_DATE('%b-%y', DATE(target_datetime_or_ts_column)) AS formatted_mmm_yy FROM your_table;
关键避坑提示
- 强制固定英文输出避免区域适配问题:如果你的项目默认区域不是en-US,直接用默认参数调用函数的话,
%b会返回当前区域语言下的月份缩写,比如中文项目会输出"12月"、法语项目会输出"Déc",和需要的英文缩写格式不符。这时候只要在函数里显式指定en-US语言参数,就能稳定输出标准英文缩写:SELECT FORMAT_DATE('%b-%y', target_date_column, 'en_US') AS formatted_mmm_yy FROM your_table; - 别混用容易搞错的格式掩码:很多人会写错格式导致结果不对:
- 不要用
%m代替%b:%m返回的是两位数字的月份值(比如12代表12月),不是文字形式的缩写 - 不要用
%Y代替%y:%Y返回的是四位完整年份(比如2024),不是需求要的两位短年份
- 不要用
- 别用冗余的硬编码写法:手写CASE语句做月份映射(比如写一长串
CASE WHEN EXTRACT(MONTH FROM date) = 12 THEN 'Dec' ... END)的方法完全不推荐,代码冗余、容易漏写边界值、后期维护成本极高,效率远不如原生函数。
内容的提问来源于stack exchange,提问作者Indi Singh Sall
相关产品推荐
相关产品推荐

