在做的一个财务预算管理小程序部门支出流水功能,需要能查询出指定月份的财务流水数据。 MySQL 数据库中存储了财务支出条目发生的日期,需要能通过年月来过滤查询。
例如,我要查询 2022 年 3 月份的所有财务数据。
方法一(推荐)
SELECT * FROM financial_history
WHERE `date` BETWEEN '2022-03-01' AND LAST_DAY('2022-03-01')
MySQL LAST_DAY 函数返回当前 date 或 datetime 类型值对应月份的最后一天。
MySQL LAST_DAY() returns the last day of the corresponding month for a date or datetime value. If the date or datetime value is invalid, the function returns NULL.
测试一下:
SELECT LAST_DAY("2022-03-01")
'2022-03-31'
方法二(不推荐)
SELECT * FROM financial_history
WHERE YEAR(`date`) = 2022 AND MONTH(`date`) = 3;
虽然 SQL 语句简洁清晰,但是这个查询的最大弊端是无法利用上日期字段的索引,只能扫描全表。 对于财务流水历史这样的数据量不可控的表,肯定是不敢用的。
方法三(不推荐)
SELECT * FROM financial_history
WHERE `date` BETWEEN '2022-03-01' AND '2022-04-01'
这种做法完全是心存侥幸,认为下个月1号没有数据;或者对于 datetime 类型,那个时间点没有数据。 对财务核算类的功能自然是不严谨的。
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式
谈笑风生
gm (来自: 中国 山东 移动) 2年前
大象 (来自: 中国 山东 烟台 电信) 2年前