我是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
有没有办法从数据库中日期列中的所有行中检索不同的年份?我不太确定如何从该列中获得独特年份数据集的预期结果。
看来我的问题与 Oracle 处理日期列的方式有关。通过使用此处的解决方案,我能够解决Oracle错误的问题。