1

我终于弄清楚了如何通过 JDBC 和 Sequel 将我的 Sinatra 应用程序连接到现有的 Oracle 数据库。

现在我的问题是我想将 Oracle DB 中的日期字段显示为日期和时间。

Oracle 的快速日期定义:

有效日期范围从公元前 4712 年 1 月 1 日到公元 9999 年 12 月 31 日。默认格式由 NLS_DATE_FORMAT 参数显式确定或由 NLS_TERRITORY 参数隐式确定。大小固定为 7 个字节。此数据类型包含日期时间字段 YEAR、MONTH、DAY、HOUR、MINUTE 和 SECOND。它没有小数秒或时区。

在 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 将其转换为时间或日期时间值而不是日期?

4

2 回答 2

3

Sequel 将Java::JavaSQL::TimestampJava::JavaSQL::Time类转换为 rubyTime/DateTim​​ ,并将Java::JavaSQL::Date类转换为 rubyDate​​ ( https://github.com/jeremyevans/sequel/blob/master/lib/sequel/adapters/jdbc.rb#L579 )。如果 Oracle 使用 subclass ofJava::JavaSQL::Date但包含时间信息,他们做错了,他们应该是 subclassing Java::JavaSQL::Timestamp

无论如何,要解决此问题,您需要将该Dataset#convert_type方法添加到jdbc/oracle subadapterhttps://github.com/jeremyevans/sequel/blob/master/lib/sequel/adapters/jdbc/oracle.rb)并处理 Oracle具体日期类型是。如果您可以正常工作,请提交补丁。

于 2011-05-26T17:12:23.003 回答
-1

试试这个方法:strptime

于 2011-05-26T12:43:13.877 回答