2010-04-20 29 views
1

我有一個SQL來獲取數據形式的MySQL的我用的日期格式轉換日期格式要求 這裏是SQL如何在結果集中獲取日期格式?

SELECT 
m.id, 
m.subject, 
m.body, 
m.read, 
m.hide, 
m.thread_id, 
DATE_FORMAT(m.sent_date, '%d-%b-%Y') sent_date, 
u.username to_name 
FROM 
messages m, 
users u 
WHERE 
u.school_id = m.school_id AND 
u.id = m.to_user_id AND 
m.school_id = 18 AND 
m.user_id = 53 AND 
m.status = 'sent' 
ORDER BY m.sent_date DESC 

當我直接在mysql的運行這個SQL它工作正常,sent_date當屬(19- APR-2010)。當我EXCUTE這在Ruby中,在結果集的sent_date是專賣店爲(星期二4月20日00:00:00 UTC 2010)

messages = Message.find_by_sql(sql) 
puts messages[0]['sent_date'] 

把語句打印 「週二4月20日00:00:00 UTC 2010」

如何在mysql結果和ruby結果集中得到相同的日期格式。

感謝

+0

'DATE_FORMAT(m.sent_date, '%D-%B-%Y')date_formatted'或訂單通過將失敗 – 2010-04-20 05:40:24

回答

4

您Froget使用「AS」在您的查詢,以便它正在採取默認的數據類型在數據庫中設置。

以下應該工作。陳綺貞的

DATE_FORMAT(m.sent_date, '%d-%b-%Y') AS sent_date 

編輯的「AS關鍵字是可選的」

我在我自己的代碼&檢查我來到了以下結論

時,我喜歡寫東西follwing
1]列名是相同的並且沒有「AS」

@check = DATE_FORMAT(m.sent_date, '%d-%b-%Y') sent_date 
    @check[0].sent_date >> Mon, 22 Mar 2010 00:00:00 UTC +00:00 

2]列名稱與「AS」相同

@check = DATE_FORMAT(m.sent_date, '%d-%b-%Y') AS sent_date 
    @check[0].sent_date >> 22-Mar-2010 

3]列名是不同的,並且W/0 「AS」

@check = DATE_FORMAT(m.sent_date, '%d-%b-%Y') date 
    @check[0].date >> 22-Mar-2010 
+0

因爲關鍵字是可選的 – 2010-04-20 06:05:44

+0

@Col。 Sharpnel: - 請檢查我編輯的答案,我想對此發表任何評論。 – Salil 2010-04-20 06:54:35

+0

感謝您提供解決方案。你能解釋爲什麼它會發生相同的別名嗎? – Prasanna 2010-04-21 10:43:39

0

這不是字符串,但日期對象,如果你使用一些日期列類型在數據庫中存儲這個領域。您可以使用strftime方法進行輸出格式化。對於19-APR-2010格式,你可以使用這個

puts messages[0]['sent_date'].strftime("%d-%b-%Y") 
相關問題