【问题标题】:Issues querying date column from legacy Oracle database and ActiveRecord从旧版 Oracle 数据库和 ActiveRecord 查询日期列的问题
【发布时间】:2012-04-23 20:01:15
【问题描述】:

我是 Rails 新手,仍在学习它是如何工作的。我正在尝试从旧 Oracle 数据库中的日期列中检索年份列表,以便获取已输入对象的所有年份列表。 Oracle 数据库是 10g,我正在使用带有 ruby​​ 1.9.2p290 的 rails 3.2 并使用 oracle 增强适配器 gem。

目前,我正在使用以下代码执行我的查询(.attribute 是为了帮助我确定查询返回的内容):

- License.select("distinct(to_char(application_date,'yyyy'))").each do |lic|
    %p= lic.attributes

我得到的结果是一些哈希值,其中包含在我不确定如何访问的数据库列中找到的所有不同年份。

{"(to_char(application_date,'yyyy'))"=>"2002"}

我还尝试从数据库表的日期列中简单地选择所有行并输出结果。但是,我收到一个我不太明白如何解决的 Oracle 错误。

- License.select("application_date").uniq.each do |lic|
    %p= lic.year

给我以下错误:

OCIError: ORA-01878: specified field not found in datetime or interval: SELECT DISTINCT application_date FROM "LICENSE" 

Oracle 增强适配器配置为在 oracle 初始化程序中按列名模拟日期:

self.emulate_dates_by_column_name = true

我还将许可证模型中的列设置为日期列:

set_date_columns :application_date

有没有办法从数据库中日期列的所有行中检索不同的年份?我不太确定如何从该列中获得唯一年份数据集的所需结果。

【问题讨论】:

    标签: sql ruby-on-rails oracle activerecord legacy-database


    【解决方案1】:

    看来我的问题与 Oracle 处理日期列的方式有关。通过使用解决方案 here,我能够解决我的 Oracle 错误问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-06
      • 2015-12-18
      • 1970-01-01
      • 2017-08-24
      • 1970-01-01
      • 2015-12-19
      • 2022-07-06
      相关资源
      最近更新 更多