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

时间:2010-04-20 05:22:36

标签: mysql ruby-on-rails

我有一个sql从mysql获取数据,我用dateformat来转换日期所需的格式 这是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来自(2010年4月19日)。当我在ruby中执行此操作时,在结果集中,sent_date将存储为(Tue Apr 20 00:00:00 UTC 2010)

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

puts statement打印“Tue Apr 20 00:00:00 UTC 2010”

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

由于

2 个答案:

答案 0 :(得分:4)

您在查询中使用“AS”,因此它会在数据库中设置默认数据类型。

以下应该工作。欢呼的

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

已编辑“AS关键字是可选的”

我检查自己的代码&我得出了以下结论

当我写下这样的东西时 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

答案 1 :(得分:0)

如果您使用某种日期列类型在数据库中存储此字段,则它不是字符串,而是日期对象。您可以使用strftime方法进行输出格式化。对于2010年4月19日格式,您可以使用此

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