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结果集中获得相同的日期格式。
由于
答案 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")