如何在结果集中获取日期格式?

问题描述:

我有一个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

您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

这不是字符串,但日期对象,如果你使用一些日期列类型在数据库中存储这个领域。您可以使用strftime方法进行输出格式化。对于19-APR-2010格式,你可以使用这个

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