mySQL查询使用UNIX_TIMESTAMP返回0结果

时间:2014-09-15 02:55:00

标签: mysql sql

我有以下查询,我假设应该返回结果:

SELECT 
    * 
FROM 
    media
WHERE 
    sent < package
AND 
    flag = 0
AND 
    UNIX_TIMESTAMP(last_run) + 1800 < UNIX_TIMESTAMP(NOW())
ORDER BY 
    last_run ASC 
LIMIT 1

我的数据库中有以下行

`last_run` = '2014-09-13 17:30:0'
`flag` = '0'
`sent` = '4'
`package` = '400'

就目前它2014-09-15 02:53:57目前time() 1410749659 SELECT UNIX_TIMESTAMP(last_run), UNIX_TIMESTAMP(NOW()), last_run FROM media LIMIT 1 ---------------------------------------------------------------------------- UNIX_TIMESTAMP(last_run) UNIX_TIMESTAMP(NOW()) last_run 1410752462 1410750296 2014-09-14 20:41:02 我假设应该返回?如果没有,这背后的原因是什么?

在检查mySQL的时间戳时,我从此查询中获得以下结果

{{1}}

2 个答案:

答案 0 :(得分:1)

为什么使用UNIX_TIMESTAMP。假设last_rundatetime,请执行以下操作:

SELECT m.* 
FROM media m
WHERE sent < package AND flag = 0 AND
      last_run < now() - interval 30 minute
ORDER BY last_run ASC 
LIMIT 1;

答案 1 :(得分:1)

问:我认为应该返回此[行]?

A:是的,我们期望返回您描述的行(假设没有隐式数据转换,例如{{1}的数据类型}和sent列是整数。

使用数据类型为DATETIME的package列,我们期待这个谓词:

last_run

相当于:

UNIX_TIMESTAMP(last_run) + 1800 < UNIX_TIMESTAMP(NOW())

最可能的解释是表中没有满足所有谓词的行;其他谓词也应该被调查。 (在删除其他谓词的情况下进行测试。)