我在选择未来会议时遇到的麻烦是从现在开始的21天。所以从现在到21天之间不是这样,而是仅在今天21天后举行。
在我的表dx_sessions_dates
中,我有一个 BIGINT 类型的字段timestart
,其中保存了时间戳(为什么BIGINT而不是TIMESTAMP? - >不是我的DB,但无法改变它......)。
我的SQL查询是:
SELECT timestart, timefinish, sessionid FROM `dx_sessions_dates` WHERE timestart = UNIX_TIMESTAMP(DATE_ADD(NOW(), INTERVAL 21 DAY))
如您所见,我想选择所有会话,其中timestart是从现在开始的21天。 从现在开始的21天应该是2015年4月15日。
查询始终返回 0 行....在我的表格中,我有value = 1429081200
的时间启动。当您使用this计算日期时,您会看到 2015年4月15日。为什么我没有收到任何行?
答案 0 :(得分:1)
您计算的unixtimestamp永远不会是您存储的值的时刻。你只需要在同一天。
尝试
SELECT timestart, timefinish, sessionid
FROM `dx_sessions_dates`
WHERE date(FROM_UNIXTIME(timestart)) = curdate() + interval 21 DAY
答案 1 :(得分:0)
尝试使用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天。