posts - 2,comments - 0,views - 491

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)

posted on   园中小小草  阅读(195)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示