1

我必须查询一些特定的字段,现在我需要在选择中将日期转换为字符。在 oracle 中是这样的:

SELECT title,
  to_char(created_at, 'yyyy-mm-dd') created_at,
FROM SomeTable
WHERE (my_id LIKE '1')

我的 Rails 查询是:

SomeModel.where("my_id like ? ", some_id).select("title, to_char(created_at,'yyyy-mm-dd') created_at")

Oracle 查询将返回类似“2013-01-01”的日期,但 Rails 查询似乎不起作用,它返回“2013-01-01T00:00:00-07:00”

我可能错过了一些东西,但我只是不知道是什么。我也知道我可以在视图或其他地方格式化它,但我需要这种方式,在 SQL 查询中。

4

1 回答 1

2

将查询替换为:

SomeModel.where("my_id like ? ", some_id).select("title, DATE(created_at) created_at")

您将看到记录为[#<SomeModel title: "Foo" created_at: "2013-01-01 00:00:00", #..] 请注意它完全没问题。它是一个 ActiveRecord 对象,并且created_at是该模型的 DateTime 字段,因此无论您如何修改查询,它仍然会以DateTime时尚的方式显示它。

如果你用类似的东西改变了查询 ..select("title, DATE(created_at) created_at_date"),那么你会得到返回的对象: [#<SomeModel title: "Foo", #..]。同样,这也完全created_at_date没问题,模型中不存在命名列,因此这些对象不会显示它们,但如果您以 : result.first.created_at_date#=>的形式进行查询"2013-01-01",这正是您想要的。

希望它清楚它是如何工作的。:)

于 2013-06-04T15:53:14.750 回答