如何用SQL筛选DATE列值为每月第一天的数据库数据?
筛选每月第一天数据的SQL写法
核心需求
从data_table表中,筛选出date_column列值为每月第一天、且日期在1990-01-01至2023-12-31之间的所有数据。
不同数据库的具体写法
以下是几种主流关系型数据库的简单实现,你可以根据自己使用的数据库选择对应语句:
MySQL / MariaDB
直接判断日期的日部分是否为01,同时限定日期范围:SELECT * FROM data_table WHERE DATE_FORMAT(date_column, '%d') = '01' AND date_column BETWEEN '1990-01-01' AND '2023-12-31';更严谨的写法(避免格式匹配潜在问题):
SELECT * FROM data_table WHERE date_column = DATE_SUB(date_column, INTERVAL DAYOFMONTH(date_column)-1 DAY) AND date_column BETWEEN '1990-01-01' AND '2023-12-31';PostgreSQL
通过截断日期到月份,得到当月第一天后对比:SELECT * FROM data_table WHERE date_column = DATE_TRUNC('month', date_column)::DATE AND date_column BETWEEN '1990-01-01' AND '2023-12-31';SQL Server
用日期偏移计算得到当月第一天:SELECT * FROM data_table WHERE date_column = DATEADD(month, DATEDIFF(month, 0, date_column), 0) AND date_column BETWEEN '1990-01-01' AND '2023-12-31';Oracle
截断日期到月份维度:SELECT * FROM data_table WHERE date_column = TRUNC(date_column, 'MM') AND date_column BETWEEN TO_DATE('1990-01-01', 'YYYY-MM-DD') AND TO_DATE('2023-12-31', 'YYYY-MM-DD');
额外提示
添加日期范围筛选能减少大表的查询数据量,提升查询效率;如果不确定数据库类型,可以先尝试MySQL的第一种写法,多数数据库支持类似的日期格式化逻辑。
内容的提问来源于stack exchange,提问作者scottyboombox
相关产品推荐
相关产品推荐

