Проблемы SQLite / Rails с датой и временем - PullRequest
3 голосов
/ 30 июня 2011

Я создаю приложение Rails, которое создает заказы по расписанию.В расписании есть время в формате чч: мм и отметки для каждого дня недели.Метод периодически проверяет расписания и создает любые заказы, требуемые расписанием.

Сначала я строю время для заказа на этой неделе в объекте Ruby DateTime, затем проверяю, существует ли он, и создаю, если нет, например.:

order = Order.where( :delivery_datetime = del_datetime )
unless order.any?
  Order.create( :status => 'Estimated', :delivery_datetime => del_datetime )
end

Это работает, как и ожидалось, на моей машине, но когда другие люди забрали его из хранилища, он каждый раз воссоздает заказы.Я исследовал SQL, который он использовал, и проблема, казалось, заключалась в том, что он создавал предложение where, немного отличающееся от оператора вставки:

SELECT COUNT(*) FROM orders WHERE delivery_datetime = '2011-06-30 18:00:00.000000'
INSERT INTO orders (delivery_datetime) VALUES ('2011-06-30 18:00:00.000000000')

Таким образом, разница заключается в трех дополнительных нулях в частичном втором поле.Я понимаю, что SQLite не имеет реальных типов дат, поэтому они отличаются только потому, что строки разные.Проблема, с которой я столкнулся сейчас, заключается в том, что я не могу принудительно установить формат вставленной строки.Например, даже если я сделаю следующее:

Order.create( :status => 'Estimated',
               :delivery_datetime => del_datetime.strftime( '%Y-%m-%d %H:%M' ) )

оператор вставки все еще использует «стандартный» формат - но с 6 нулями в моем случае и 9 в другом.

1 Ответ

0 голосов
/ 13 июля 2011

Нет ответов! Не видел этого на Stack Overflow раньше. Прямо сейчас я «исправил» его, объявив поле базы данных в виде строки, а затем использовал strftime, чтобы убедиться, что формат даты остается прежним. Это работает, но не кажется идеальным.

Прочитав все документы в Sqlite о том, что типы данных являются «ошибочными», я подумываю о том, чтобы отбросить их для Postgres или аналогичных. Я хочу, чтобы datetime был datetime, и чтобы он случайно не решил, что 18: 00: 00.000000 и 18: 00: 00.000000000 - это разные времена ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...