1

Sinatra アプリを JDBC と Sequel 経由で既存の Oracle データベースに接続する方法をついに見つけました。

今私の問題は、Oracle DB の Date フィールドを Date with time として表示したいということです。

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 でこれを Date ではなく Time または DateTime 値に変換する方法を誰か教えてもらえますか?

4

2 に答える 2

3

Sequelはクラスを ruby​​ に、クラスを ruby​​ に変換Java::JavaSQL::Timestampします( https://github.com/jeremyevans/sequel/blob/master/lib/sequel/adapters/jdbc.rb#L579 )。Oracle が のサブクラスを使用しているが時間情報を含んでいる場合は、間違っています。サブクラス化する必要があります。Java::JavaSQL::TimeTime/DateTimJava::JavaSQL::DateDateJava::JavaSQL::DateJava::JavaSQL::Timestamp

とにかく、これを修正するには、Dataset#convert_typeメソッドをjdbc/oracle subadapter( https://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 に答える