2017-05-17 37 views
0

我有一个列(lastlogin),它包含以下value = '17th May 2017 09:40:43 AM' ----MYSQL - 日期/时间显示最后30分钟

PHP函数来创建戳记:

date('jS F Y h:i:s A'); 

我怎样才能做一个选择查询显示当前时间最近30分钟内的(lastlogin)?

我想我们必须将日期/时间转换为字符串,并将2分开?

任何帮助将是惊人的。

UPDATE:

我试过以下,但在表中没有工作的返回的记录更aless:

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

做一个比较,你要么需要COMPA重新设置为将“正确排序”的日期时间类型或格式化日期时间。它存储为字符串还是日期时间/时间戳? –

+0

存储为字符串 – memaxt

+0

您可以显示您的表格架构(__用info__编辑您的问题)吗?为了提供答案,我需要知道涉及的表名和列名。 –

回答

1

您需要将您的字符串日期转换为datetime格式比较,那么当前日期时间比作存储值。

您也可以将它们转换为可排序字符串进行比较。类似于“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))) 
+0

为什么投票反对?如果你打算投反对票,至少提供一个原因,这样人们可以改进他们的答案。 –

+0

这工作..向你!不得不改变last_login lastlogin ...你再次感谢我的投票! – memaxt

+0

很高兴它的工作,不客气!我也更新了正确的列名 –

0
SELECT * FROM tablename WHERE lastlogin >= DATE_SUB(NOW(), INTERVAL 30 MINUTE); 

查尔斯enge是将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); 
+0

不幸的是,这没有奏效返回ZERO行 – memaxt

+0

使用该格式将无法正确比较,因为它是一个字符串,并且该格式无法正确比较。 –

相关问题