如果日期是21天后,我在选择未来的会话时遇到了问题。所以不是从现在到21天,而是从今天起21天内举行的会议。
在我的表dx_sessions_dates
中,我有一个类型为BIGINT的字段timestart
,其中保存了时间戳(为什么是BIGINT而不是timestamp?->不是我的数据库,但无法更改它…)。
我的SQL查询是:
SELECT timestart, timefinish, sessionid FROM `dx_sessions_dates` WHERE timestart = UNIX_TIMESTAMP(DATE_ADD(NOW(), INTERVAL 21 DAY))
正如你所看到的,我想选择时间开始为21天后的所有会话21天后应为2015年4月15日。
查询总是返回0行。在我的表中,我有一个value = 1429081200
的时间开始。当你用这个计算日期时,你会发现它是2015年4月15日。为什么我不收回一排?
您计算的unixtimestamp从来都不是您存储的值的时刻。你只需要同一天。
尝试
SELECT timestart, timefinish, sessionid
FROM `dx_sessions_dates`
WHERE date(FROM_UNIXTIME(timestart)) = curdate() + interval 21 DAY
尝试使用BETWEEN
查找自今天起21天的24小时内任何位置具有时间起始值的任何行:
SELECT timestart, timefinish, sessionid
FROM dx_sessions_dates
WHERE timestart BETWEEN UNIX_TIMESTAMP(adddate( curdate(), 21)) AND UNIX_TIMESTAMP(adddate(curdate(), 22))
curdate()返回今天开始时的午夜,因此从今天起21天等于从午夜起22天。