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 2022-09-06 19:34  园中小小草  阅读(203)  评论(0)    收藏  举报