Как я могу обойти это?
TL; DR: Store меньше точности, либо:
- уговаривая вашу БД платформу для хранения только миллисекунды и отбросить любую дополнительную точность (трудный на SQLite, я думаю)
- только когда-либо вставив значения с точностью вы хотите (трудно убедиться, что вы покрыли все случаи)
есть DateTime объектов JavaScript, который поддерживает микрофон Росекундная точность?
Если вы кодируете свои даты как Строки или Числа, вы можете добавить любую точность, которую хотите. Существуют и другие варианты (некоторые обсуждаются in this thread). Если вы на самом деле хотите эту точность, это, вероятно, не самый лучший подход.
Могу ли я укоротить раз в базе данных в миллисекундах ..
Да, но потому, что вы на SQLite это немного странно. SQLite не имеет дат; вы фактически сохраняете значения в поле text
, real
или integer
. Эти базовые классы хранения определяют точность и диапазон значений, которые вы можете сохранить. Там приличный write up of the differences here.
Вы можете, например, изменить базовый класс хранения на integer
. Это приведет к усечению дат, сохраненных в этом поле, с точностью до 1 секунды. При выполнении запросов от JS вы также можете урезать свои даты, используя Date.prototype.setMilliseconds()
function. Например:
MyModel.objects.filter(time__lte = javascript_datetime.setMilliseconds(0))
Более функциональная платформа DB будет обрабатывать ее лучше. Например, в PostgreSQL вы можете specify the precision stored more exactly. Это добавит столбец временной отметки с точностью до миллисекунд (соответствующий Javascript).
alter table "my_table" add "my_timestamp" timestamp (3) with time zone
MySQL будет let you do the same thing.
.. или попросить выполнить запрос с пониженной точностью?
Да, но это, как правило, неправильный подход.
Если критерии, которые вы фильтруете от, являются точными, тогда вы в порядке; вы можете усечь значение, а затем фильтр (например, в примере ..setMilliseconds()
). Но если значения в БД вы проверяете против, вы слишком точны, у вас будет плохое время.
Вы мог написать запрос таким образом, что сохраненные значения отформатированы или усечены, чтобы уменьшить их точность до того, по сравнению с критериями, но эта операция будет необходимо выполнить для каждого значения, хранящегося. Это могут быть миллионы ценностей. Более того, поскольку вы генерируете значения динамически, вы просто обошли все индексы, созданные против сохраненных значений.