如何将TIMESTAMP_TRUNC返回的月份值转为JAN类英文缩写字符串
SQL查询月份转英文缩写修改方案
你当前使用的是BigQuery SQL语法,要输出JAN这类全大写3位英文月份缩写,调整方法如下:
修改核心逻辑
原来的TIMESTAMP_TRUNC(started_at, month) AS month是返回截断到当月第一天的时间戳,替换为时间格式化函数即可:%b是SQL标准的3位月份缩写格式符,外层包UPPER()即可转为全大写格式。
注意:如果
started_at字段为DATE类型而非TIMESTAMP类型,将下文的FORMAT_TIMESTAMP替换为FORMAT_DATE即可。
场景1:按「年+月」分组(不同年份的同一月份分开统计,仅显示月份缩写)
如果不需要合并不同年份的同月份数据,保留原有分组逻辑不变,仅调整SELECT部分的输出即可:
SELECT COUNT(distinct ride_id) as total_rides, rideable_type, member_type, TIMESTAMP_TRUNC(started_at, month) AS raw_month, -- 可选,保留原始月份时间戳用于校验 UPPER(FORMAT_TIMESTAMP('%b', started_at)) AS month_abbr FROM `data.table` GROUP BY rideable_type, member_type, raw_month;
场景2:不区分年份,所有年份的同一月份合并统计
直接将月份字段替换为格式化后的缩写,分组同步调整即可:
SELECT COUNT(distinct ride_id) as total_rides, rideable_type, member_type, UPPER(FORMAT_TIMESTAMP('%b', started_at)) AS month_abbr FROM `data.table` GROUP BY rideable_type, member_type, month_abbr;
其他数据库适配说明
如果你使用的不是BigQuery,对应格式化函数替换即可:
- MySQL:替换为
UPPER(DATE_FORMAT(started_at, '%b')) - PostgreSQL:替换为
UPPER(TO_CHAR(started_at, 'MON')) - SQL Server:替换为
UPPER(FORMAT(started_at, 'MMM'))
内容的提问来源于stack exchange,提问作者Glenn MacRae
相关产品推荐
相关产品推荐

