MYSQL - 日期/时间显示最后30分钟

时间:2017-05-17 11:26:27

标签: mysql string date select

我有一个列(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)    

2 个答案:

答案 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);