MySQL中的日期类比较
今天使用mybatis
遇到一个关于日期类比较的问题,我看数据库存储到是datetime
格式,我想着日期类比较也需要把用户输入的日期字符串转为日期Date
类在与数据库进行比较,但是出现了问题,我又试试使用字符串直接与数据库中的日期进行比较,发现可以,但是还有一些问题。
数据库准备
-- 创建表 DROP TABLE IF EXISTS `zhang_wu`; CREATE TABLE `zhang_wu` ( `zwid` int(11) NOT NULL AUTO_INCREMENT, `flname` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, `money` double NULL DEFAULT NULL, `zhanghu` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, `createtime` datetime(0) NULL DEFAULT NULL, `description` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, PRIMARY KEY (`zwid`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 15 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; -- 数据 INSERT INTO `zhang_wu` VALUES (1, '吃饭支出', 247, '交通银行', '2016-03-02 08:10:25', '家庭聚餐'); INSERT INTO `zhang_wu` VALUES (2, '工资收入', 12345, '现金', '2016-03-15 09:00:00', '开工资了'); INSERT INTO `zhang_wu` VALUES (3, '服装支出', 1998, '现金', '2016-04-02 12:05:00', '买衣服'); INSERT INTO `zhang_wu` VALUES (4, '吃饭支出', 325, '现金', '2016-06-18 14:30:00', '朋友聚餐'); INSERT INTO `zhang_wu` VALUES (5, '股票收入', 8000, '工商银行', '2016-10-28 05:00:00', '股票大涨'); INSERT INTO `zhang_wu` VALUES (6, '股票收入', 5000, '工商银行', '2016-10-28 18:00:00', '股票又大涨'); INSERT INTO `zhang_wu` VALUES (7, '工资收入', 5000, '交通银行', '2016-10-28 19:00:00', '又开工资了'); INSERT INTO `zhang_wu` VALUES (8, '礼金支出', 5000, '现金', '2016-10-28 08:00:00', '朋友结婚'); INSERT INTO `zhang_wu` VALUES (9, '其他支出', 1560, '现金', '2016-10-29 17:00:00', '丢钱了'); INSERT INTO `zhang_wu` VALUES (10, '交通支出', 2300, '交通银行', '2016-10-29 20:00:00', '油价还在涨啊'); INSERT INTO `zhang_wu` VALUES (11, '吃饭支出', 1000, '工商银行', '2016-10-29 00:00:00', '又吃饭'); INSERT INTO `zhang_wu` VALUES (12, '工资收入', 1000, '现金', '2016-10-30 00:00:00', '开资'); INSERT INTO `zhang_wu` VALUES (13, '交通支出', 2000, '现金', '2016-10-30 00:40:00', '机票好贵'); INSERT INTO `zhang_wu` VALUES (14, '股票收入', 6000, '招商银行', '2016-10-30 14:00:00', '股票');
获取某一天的记录
1、获取2016年10月30日的记录
你可能会这样写
select * from zhang_wu where createtime = '2016-10-30';
但是这样只能查询出来一条数据,就是zwid为12的记录
这说明了他匹配的某一个时间点的记录,因此我们要使用date()
函数
正确的应该这样写
select * from zhang_wu where date(createtime) = '2016-10-30';
date()函数的作用
date()函数时将日期时间转为日期,也就是说他会自动忽略时间
select createtime, date(createtime) from zhang_wu -- 2016-10-30 14:00:00 -> 2016-10-30
查询2016年10月的记录
由日期函数+模糊查询即可完成
select * from zhang_wu where date(createtime) like '2016-10-%'
查询2016年3月15日到10月28日的记录
因为在mybatis的mapper文件中写查询条件时<=
会报错。因为理解为标签的开始,所以我们都使用>=
select * from zhang_wu where date(createtime) >= '2016-03-15' and '2016-10-28' >= date(createtime)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~