Как мне преобразовать JDBC: Oracle Date в DateTime для Ruby? - PullRequest
1 голос
/ 26 мая 2011

Я наконец-то понял, как подключить мое приложение Sinatra через JDBC и Sequel к существующей базе данных Oracle.

Теперь моя проблема состоит в том, что я хотел бы показать поля Date из базы данных Oracle как Dateвремя.

Быстрое определение даты из Oracle:

Действительный диапазон дат с 1 января 4712 г. до н.э. до 31 декабря 9999 г. н.э.Формат по умолчанию определяется явно параметром 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 преобразовать это значение в Time или DateTime, а не в Date?

Ответы [ 2 ]

3 голосов
/ 26 мая 2011

Сиквел преобразует 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. Пожалуйста, отправьте патч, если он работает правильно.

0 голосов
/ 26 мая 2011

Попробуйте этот метод: strptime

...