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)