SQL创建判断RecordTimestamp是否为上月的isMonth函数正确语法
自定义函数正确实现
以下为BigQuery标准SQL环境下的完整实现,其他兼容TEMP FUNCTION语法的SQL引擎(如Spark SQL)可根据对应函数规则微调:
CREATE TEMP FUNCTION isMonth(recordTimestamp TIMESTAMP) AS ( DATE(recordTimestamp) >= DATE_TRUNC(DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH), MONTH) AND DATE(recordTimestamp) < DATE_TRUNC(CURRENT_DATE(), MONTH) );
实现逻辑说明
- 采用月份截断+区间判断的方案,自动适配不同月份的天数差异,不会出现2月、小月月末判断异常的问题
- 区间使用左闭右开规则,完整覆盖上月第一天0点到当月第一天0点前的所有时间,不会漏算上月最后一天的任意时刻
- 若业务需要指定时区,可将
CURRENT_DATE()替换为CURRENT_DATE('对应时区标识'),例如国内业务可使用CURRENT_DATE('Asia/Shanghai')适配东八区时间
内容的提问来源于stack exchange,提问作者busheriff
相关产品推荐
相关产品推荐

