У меня есть приложение Ruby on Rails с базой данных PostgreSQL; несколько таблиц имеют атрибуты временной метки created_at и updated_at. При отображении эти даты форматируются в языковом стандарте пользователя; например, отметка времени 2009-10-15 16:30:00.435
становится строкой 15.10.2009 - 16:30
(формат даты для этого примера — dd.mm.yyyy - hh.mm
).
Требование состоит в том, что пользователь должен иметь возможность искать записи по дате, как если бы они были строками, отформатированными в текущей локали. Например, поиск 15.10.2009
вернет записи с датами 15 октября 2009 года, поиск 15.10
вернет записи с датами 15 октября любого года, поиск 15
вернет все даты, соответствующие 15 (будь то день, месяц или год). . Поскольку пользователь может использовать любую часть даты в качестве условия поиска, ее нельзя преобразовать в отметку даты/времени для сравнения.
Один (медленный) способ - получить все записи, отформатировать даты и выполнить поиск по ним. Это можно ускорить, если сначала получить только идентификатор и даты, выполнить поиск, а затем получить данные для соответствующих записей; но это все еще может быть медленным для большого количества строк.
Другим (не независимым от базы данных) способом было бы привести/отформатировать даты в правильном формате в базе данных с помощью функций или операторов PostgreSQL и заставить базу данных выполнить сопоставление (с операторами регулярных выражений PostgreSQL или еще чем-то).
Есть ли способ сделать это эффективно (без извлечения всех строк) независимо от базы данных? Или вы думаете, что я иду в неправильном направлении и должен подойти к проблеме по-другому?
98
возвращать как1988
, так и1998
? - person Quassnoi   schedule 01.02.2010