我有一个列(lastlogin),其中包含以下value = '17th May 2017 09:40:43 AM'
----
php函数创建戳记:
date('jS F Y h:i:s A');
如何在当前时间的最后30分钟内执行显示(lastlogin)的选择查询?
我猜我们必须将日期/时间转换为字符串并将2?
分开任何帮助都会很棒。
更新
我已经尝试了以下但是没有工作返回更多的表中的记录:
SELECT user_id, ('lastlogin' >= DATE_FORMAT(NOW() - INTERVAL 30 MINUTE,'%D %M %Y %H:%m:%s %p')) as result
FROM login_last
where lastlogin >= DATE_FORMAT(NOW() - INTERVAL 30 MINUTE,'%D %M %Y %H:%m:%s %p')
GROUP BY user_id
表格结构
[id] int(8)
[user_id] int(11)
[lastlogin] varchar(30)
[browser] varchar(300)
答案 0 :(得分:1)
您需要将字符串日期转换为日期时间格式以进行比较,然后将当前日期时间与存储的值进行比较。
您还可以将它们转换为可排序字符串以进行比较。像“2017-05-17 10:20:10 AM”之类的东西,但使用日期时间类型比较容易。
<强>参考:强>
MySQL查询:
SELECT
`user_id`,
`last_login`,
(STR_TO_DATE(`lastlogin`,'%D %b %Y %h:%i:%s %p') >= (NOW() - (INTERVAL 30 MINUTE))) as `in_range`
FROM `login_last`
WHERE (STR_TO_DATE(`lastlogin`,'%D %b %Y %h:%i:%s %p') >= (NOW() - (INTERVAL 30 MINUTE)))
答案 1 :(得分:0)
SELECT * FROM tablename WHERE lastlogin >= DATE_SUB(NOW(), INTERVAL 30 MINUTE);
面临的挑战是将DATE_SUB(NOW(), INTERVAL 30 MINUTE)
的结果转换为正确的格式'17th May 2017 09:40:43 AM'
(或将您的lastLogin的左边条件别名格式化为UNIX_TIMESTAMP / datetime)。如果您自己插入日期值,您可能已经知道如何获得该格式并可以自己完成。否则,我建议您创建一个新问题,即将UNIX_TIMESTAMP格式化为所需格式。
盲目的猜测没有机会尝试在我的上面将是:
SELECT * FROM tablename
WHERE UNIX_TIMESTAMP(lastlogin) >= DATE_SUB(NOW(), INTERVAL 30 MINUTE);