2013-10-07 41 views
0

我想從我的數據庫中提取數據,並通過使用UNIX_TIMESTAMP組織DATE,但它似乎無法正常工作。這只是我失敗的嘗試之一。我遇到的問題是我試圖將表中的Field轉換爲UnixTimeStamp,但它似乎不起作用。此查詢的目的是爲了將所有未來生日都拉出來,如果生日已過,我們在hasItPassed列中給它一個'0'值,如果不是,我們給它一個'1'值。我試圖組織這張桌子的方式是列出所有即將到來的生日(在最上方有最近的生日),並且已經在列表底部通過了所有生日。MYSQL UNIX_TIMESTAMP不轉換

(EXAMPLE) bDay.date format --> '10/07/2013'

所以我的問題是,沒有人知道的日期字段中您的數據庫轉換爲unixTime格式的最好方法?在這個例子中發生的是在我的字段hasItPassed中,當事實上有些日期沒有通過時(所以有些應該有1而不是0),所有內容都變成0。因此,我知道我遇到了轉換問題。

SELECT bDay.id, bDay.userid, bDay.summary, 
bDay.time_create, bDay.Address, bDay.date, bDay.time, 
CASE WHEN UNIX_TIMESTAMP(bDay.date) >= NOW() 
THEN '1' 
ELSE '0' 
END AS hasItPassed 
FROM 
BirthdayTable 
WHERE 
ORDER BY hasItPassed DESC , 
CASE WHEN hasItPassed =1 
THEN date 
END ASC , 
CASE WHEN hasItPassed =0 
THEN date 
END DESC 

如果有任何困惑,請讓我知道,我會重新格式化問題。謝謝你!

+0

爲什麼你關心UNIX時間戳?如果你已經有日期字段,這樣會更好。 –

回答

0

要麼讓你的比較比較日期或時間戳 - 你有它混合起來。 例如

bDay.date >= date(NOW()) 

UNIX_TIMESTAMP(bDay.date) >= UNIX_TIMESTAMP(NOW()) 
+0

我只是試了一下,仍然沒有午餐,如果我把比較看起來像這樣--->'bDay.date> = '10/07/2013',那麼工作是什麼,就像我想要的那樣工作,但我知道它不是解決這個問題的正確方法。任何其他想法如何解決它?儘管我非常感謝你的回答! –

+0

是bDay.date的DATE列嗎?什麼,你認爲是不是比較日期的有效方式,你應該拋開使用YYYY-MM-DD –

+0

的ISO8601風格作爲,調試這種事情的時候,是有幫助的表達式的部分查詢輸出增加看看它可能會出錯,例如選擇bDay.date,UNIX_TIMESTAMP(bDay.date),FROM_UNIXTIME(UNIX_TIMESTAMP(bDay.date)).... –