深入浅出MySQL(三) 常用的日期查询归纳

最近总结了一下关于日期查询里面常用到技巧,于是在此做一些相应的归纳,希望能够帮助到各位开发者们:

这里是即将用到的数据表: 数据表里面的date字段的格式为datetime类型
这里写图片描述
创建表格的sql如下所示:

DROP TABLE IF EXISTS `tips`;
CREATE TABLE `tips` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `content` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `date` datetime DEFAULT NULL,
  `author` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

INSERT INTO `tips` VALUES ('1', 'atest', '2017-10-01 20:30:13', 'idea');
INSERT INTO `tips` VALUES ('2', 'atest', '2018-07-03 20:30:40', 'idea');
INSERT INTO `tips` VALUES ('3', 'atest', '2018-07-12 20:30:52', 'as');
INSERT INTO `tips` VALUES ('11', 'atest', '2018-06-23 22:01:00', 'auwigrjk');
INSERT INTO `tips` VALUES ('12', 'atest', '2018-07-17 20:30:13', 'auwigrjk');
INSERT INTO `tips` VALUES ('13', 'atest', '2018-07-01 20:30:13', 'auwigrjk');
INSERT INTO `tips` VALUES ('14', 'atest', '2018-06-17 20:30:13', 'auwigrjk');
INSERT INTO `tips` VALUES ('15', 'atest', '2018-07-03 00:00:00', 'auwigrjk');
INSERT INTO `tips` VALUES ('16', 'atest', '2018-07-23 00:00:00', 'auwigrjk');
INSERT INTO `tips` VALUES ('17', 'atest', '2018-07-03 00:00:00', 'auwigrjk');
INSERT INTO `tips` VALUES ('18', 'atest', '2018-07-05 00:00:00', 'auwigrjk');

那么接下来就是一些我们在查询中经常会用到的小技巧了:


查询在某一段日期之间的数据:

SELECT * FROM tips WHERE date BETWEEN '2018-07-01' AND '2019-01-01'

查询在指定某一天之后的数据:

SELECT * FROM tips WHERE date>'2018-06-24'

查询30天以前的数据:

SELECT * FROM tips WHERE date>DATE_ADD(NOW(),INTERVAL -30 DAY)

查询一个月以前的数据:

SELECT * FROM tips WHERE date>DATE_ADD(NOW(),INTERVAL -1 MONTH)

查询一年以前的数据:

SELECT * FROM tips WHERE date>DATE_ADD(NOW(),INTERVAL -1 YEAR)

查询这个月的数据:

SELECT * FROM tips WHERE DATE_FORMAT(date,'%Y-%m') = DATE_FORMAT(NOW(),'%Y-%m')

查询今年的数据:

SELECT * FROM tips WHERE DATE_FORMAT(date,'%Y') = DATE_FORMAT(NOW(),'%Y')

获取到年月日:

SELECT DATE_FORMAT(NOW(),"%Y-%m-%d")

获取到年月日,时分秒:

SELECT DATE_FORMAT(NOW(),"%Y-%m-%d %h:%m:%s")

获取英文格式的年月日,时分秒:

SELECT DATE_FORMAT(NOW(),"%Y-%M-%d %h:%m:%s")

在不改变日期datetime类型的情况下,将所有的日期都转换为年月日格式:

SELECT content,author,(CASE WHEN date!='' THEN DATE_FORMAT(date,'%Y-%m-%d') END) AS date FROM tips  ORDER BY date

mysql查询每一天某个时间段的所有记录(例:9:00:00到21:00:00):

SELECT * FROM 表名 
WHERE DATE_FORMAT(create_time,'%H:%i:%S')>='09:00:00'
and DATE_FORMAT(create_time,'%H:%i:%S')<='21:00:00' 
ORDER BY 排序字段 ASC;

感兴趣的读者也可以关注小编的个人公众号,我会定期在上边分享一些有价值的java知识内容

这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值