首页 > 解决方案 > Mysql - 在日期时间列中搜索时间范围

问题描述

我需要从列date_opened(日期时间)在特定时间范围内的表中返回记录,而不管日期是什么。我目前有这个

SELECT * FROM packages WHERE HOUR(date_opened) = 9

但我需要进一步深入。我需要date_opened09:00 到 09:30 之间的结果。我怎样才能做到这一点?

编辑 没想到有人会为此要求数据,但它是:

CREATE TABLE `packages` (
  `id` int(11) NOT NULL,
  `user` int(11) NOT NULL,
  `date_opened` datetime NOT NULL
);

INSERT INTO `packages` (`id`, `user`, `date_opened`) VALUES
(58, 3, '2019-08-26 09:43:25'),
(73, 3, '2019-08-30 09:43:48'),
(76, 3, '2019-09-03 09:46:33'),
(77, 3, '2019-09-03 09:57:34'),
(79, 3, '2019-09-04 09:46:58'),
(86, 3, '2019-09-06 09:34:13'),
(88, 3, '2019-09-09 09:42:08'),
(90, 3, '2019-09-11 09:42:04'),
(91, 3, '2019-09-12 09:40:05'),
(92, 3, '2019-09-12 09:59:31'),
(93, 3, '2019-09-13 09:56:12'),
(95, 3, '2019-09-16 09:41:44'),
(101, 3, '2019-09-19 09:52:01'),
(104, 3, '2019-09-20 09:54:20'),
(107, 3, '2019-09-23 09:37:47'),
(108, 3, '2019-09-24 09:25:07'),
(110, 3, '2019-09-25 09:25:46'),
(113, 3, '2019-09-26 09:42:42'),
(114, 3, '2019-09-27 09:50:44'),
(115, 3, '2019-09-30 09:25:16'),
(117, 3, '2019-10-03 09:42:21'),
(123, 3, '2019-10-10 09:25:08'),
(126, 3, '2019-10-14 09:50:07'),
(127, 3, '2019-10-15 09:55:12'),
(129, 3, '2019-10-16 09:48:47');

ALTER TABLE `packages`
  ADD PRIMARY KEY (`id`),
  ADD KEY `user` (`user`);

期望的结果:

| id  | user | date_opened         |
| --- | ---- | ------------------- |
| 108 | 3    | 2019-09-24 09:25:07 |
| 110 | 3    | 2019-09-25 09:25:46 |
| 115 | 3    | 2019-09-30 09:25:16 |
| 123 | 3    | 2019-10-10 09:25:08 |

标签: phpmysql

解决方案


select * 
  from packages 
 where time(date_opened) between '09:00:00' AND '09:30:00';

https://www.db-fiddle.com/f/i1Sb7zkYf9izia17B5tLHE/0

有一个论点是再次存储时间,与日期时间分开,但 8.0 可能有一种更智能的索引时间和日期的方法;我不确定。


推荐阅读