如何用SQL查询BigInt格式ordermonth字段近11个月至当月的记录
实现思路
核心需求为筛选出*当前月到往前11个月(共12个自然月)*区间内的所有记录,ordermonth为BIGINT类型且存储格式固定为合法的YYYYMM,最优实现方案是先计算出区间上下限的YYYYMM格式数值,直接和ordermonth做数值比较,该方式可以命中ordermonth上的索引,性能远高于将字段转日期后比较的写法。
不同数据库实现代码
MySQL
SELECT * FROM 替换为你的表名 WHERE ordermonth BETWEEN DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 11 MONTH), '%Y%m') + 0 AND DATE_FORMAT(CURDATE(), '%Y%m') + 0;
说明:+0用于将生成的日期字符串转为数值,避免隐式转换导致索引失效。
PostgreSQL
SELECT * FROM 替换为你的表名 WHERE ordermonth BETWEEN TO_CHAR(CURRENT_DATE - INTERVAL '11 months', 'YYYYMM')::BIGINT AND TO_CHAR(CURRENT_DATE, 'YYYYMM')::BIGINT;
SQL Server
SELECT * FROM 替换为你的表名 WHERE ordermonth BETWEEN CAST(FORMAT(DATEADD(MONTH, -11, GETDATE()), 'yyyyMM') AS BIGINT) AND CAST(FORMAT(GETDATE(), 'yyyyMM') AS BIGINT);
Oracle
SELECT * FROM 替换为你的表名 WHERE ordermonth BETWEEN TO_NUMBER(TO_CHAR(ADD_MONTHS(SYSDATE, -11), 'YYYYMM')) AND TO_NUMBER(TO_CHAR(SYSDATE, 'YYYYMM'));
注意事项
所有写法均自动处理跨年场景,生成的区间上下限完全符合数值比较逻辑,不需要额外做格式兼容。
内容的提问来源于stack exchange,提问作者HelpSeeker
相关产品推荐
相关产品推荐

