2015-03-25 111 views
0

我有麻煩,選擇未來的會議是日期是從現在起21天。所以,現在到21天之間,但只有21天才會舉行會議。MySQL日期時間間隔不工作

在我的桌子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)) 

正如你可以看到我想選擇所有地方timestart爲21天,從現在的會議。 從現在起21天內應該是2015年4月15日

查詢總是返回 rows ...。雖然在我的表中,我有一個時間開始value = 1429081200。當你用this來計算日期時,你會發現它是2015年4月15日。爲什麼我不收回任何行?

+0

[Select records where date == now + 21 days(NOT between)](可能存在重複](http://stackoverflow.com/questions/28176670/select-records-where-date-now-21-days-not之間) – 2015-03-25 09:49:32

回答

1

您計算的unixtimestamp永遠不會是您存儲的值的時刻。你只需要同一天。

嘗試

SELECT timestart, timefinish, sessionid 
FROM `dx_sessions_dates` 
WHERE date(FROM_UNIXTIME(timestart)) = curdate() + interval 21 DAY 
+0

謝謝,但我仍然沒有回來......。我是我的分數我有時間戳相當於2015年4月14/15/16 ..難道是因爲BIGINT? – nielsv 2015-03-25 09:55:49

+0

我忘了'date()'部分。請再試一次 – 2015-03-25 09:59:42

+0

謝謝,作品!你是我今天的英雄! – nielsv 2015-03-25 10:06:57

0

嘗試使用BETWEEN發現有timestart值範圍內任何地方24小時內即從今天21天任何行:

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天。