我终于弄明白了如何通过JDBC和Sequel将我的Sinatra应用程序连接到现有的Oracle数据库。
现在我的问题是我想将Oracle DB中的日期字段显示为日期和时间。
Oracle的快速日期定义:
有效日期范围为4712年1月1日 BC至公元9999年12月31日。该 默认格式已确定 由NLS_DATE_FORMAT显式显示 参数或隐含的 NLS_TERRITORY参数。大小是 固定为7个字节。此数据类型 包含日期时间字段YEAR, 每月,每天,小时,分钟和第二天。 它没有小数秒或 一个时区。
在Ruby中我想这样做:
row_added.strftime('%d.%B %Y %H:%M:%S') => 09.May 2011 00:00:00
但Ruby Date没有几小时或几分钟。
相反,我必须在SQL级别执行此操作以查看时间:
to_char(row_added, 'DD.MM.YY HH24:MI:ss') => 09.05.11 08:33:31
它按预期工作,但不应该是最佳解决方案。
有谁能告诉我如何让Ruby Sequel将其转换为Time或DateTime值而不是Date?
答案 0 :(得分:3)
续集将Java::JavaSQL::Timestamp
和Java::JavaSQL::Time
类转换为ruby Time/DateTim
,将Java::JavaSQL::Date
类转换为ruby Date
(https://github.com/jeremyevans/sequel/blob/master/lib/sequel/adapters/jdbc.rb#L579)。如果Oracle使用Java::JavaSQL::Date
的子类但包含时间信息,那么它们做错了,它们应该是子类Java::JavaSQL::Timestamp
。
无论如何,为了解决这个问题,您需要将Dataset#convert_type
方法添加到jdbc/oracle subadapter
(https://github.com/jeremyevans/sequel/blob/master/lib/sequel/adapters/jdbc/oracle.rb)并处理Oracle特定日期类型。如果你的工作正常,请提交补丁。
答案 1 :(得分:-1)
尝试此方法:strptime