use*_*621 13 mysql datetime date
我已将用户注册的日期保存为日期时间,因此例如2011-12-06 10:45:36.我已经运行了这个查询,我期待这个项目 - 2011-12-06 10:45:36 - 将被选中:
SELECT `users`.* FROM `users` WHERE created_at >= '2011-12-01' AND
created_at <= '2011-12-06'
Run Code Online (Sandbox Code Playgroud)
但事实并非如此.存在任何优雅的方式,如何选择这个项目?作为我的第一个想法是2011-12-06 + 1,但这看起来不是很好.
das*_*ash 36
您的问题是日期的短版本使用午夜作为默认值.所以你的查询实际上是:
SELECT users.* FROM users
WHERE created_at >= '2011-12-01 00:00:00'
AND created_at <= '2011-12-06 00:00:00'
Run Code Online (Sandbox Code Playgroud)
这就是为什么你没有看到10:45的记录.
将其更改为:
SELECT users.* FROM users
WHERE created_at >= '2011-12-01'
AND created_at <= '2011-12-07'
Run Code Online (Sandbox Code Playgroud)
您还可以使用:
SELECT users.* from users
WHERE created_at >= '2011-12-01'
AND created_at <= date_add('2011-12-01', INTERVAL 7 DAY)
Run Code Online (Sandbox Code Playgroud)
这将选择您要查找的同一时间间隔内的所有用户.
您可能还会发现BETWEEN运算符更具可读性:
SELECT users.* from users
WHERE created_at BETWEEN('2011-12-01', date_add('2011-12-01', INTERVAL 7 DAY));
Run Code Online (Sandbox Code Playgroud)
SELECT users.* FROM users WHERE created_at BETWEEN '2011-12-01' AND '2011-12-07';
Run Code Online (Sandbox Code Playgroud)
您需要使用“ 2011-12-07”作为终点作为日期,而没有时间默认为时间00:00:00。
因此,您实际编写的内容被解释为:
SELECT users.*
FROM users
WHERE created_at >= '2011-12-01 00:00:00'
AND created_at <= '2011-12-06 00:00:00'
Run Code Online (Sandbox Code Playgroud)
您的时间戳记是:2011-12-06 10:45:36不在这些点之间。
也更改此:
SELECT users.*
FROM users
WHERE created_at >= '2011-12-01' -- Implied 00:00:00
AND created_at < '2011-12-07' -- Implied 00:00:00 and smaller than
-- thus any time on 06
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
94215 次 |
| 最近记录: |