2015-06-01 3 views
0

У меня есть значение столбца типа TEXT. Он может содержать обычный текст, а также даты в строчном формате. Я индексирую столбец indexes value. Могу ли я также добавить атрибут, который преобразует этот столбец в целое число? Я попробовал оба из следующих:Мышление сфинкс строка атрибут даты

has "str_to_date(model.value, '%Y-%m-%d')", as: :value_as_date, type: :integer 
has "CONVERT(model.value, DATETIME)", as: :value_as_date, type: :integer 

Благодарности

ответ

1

Там в два подхода здесь ... Sphinx имеет метку времени (DateTime) тип данных для атрибутов, так что вы можете использовать это:

has "CONVERT(model.value, DATETIME)", as: :value_as_date, type: :timestamp 

Или может быть лучше использовать целое число, представляющее дату (поскольку это звучит так, как будто вы не указали временной аспект), извлекая дату из строки и затем преобразовывая значение% Y% m% d в целое число (обратите внимание, в формате даты нет дефиса).

has "... more complex SQL snippet ...", as: :value_as_date, type: :integer 

В этой ситуации, вы бы тогда нужно конвертировать любые даты для фильтров в целые числа одного и того же формата, а также.

Все это в стороне: вы хотите иметь что-то в ваших фрагментах SQL, который обрабатывает ситуации, когда ваш value столбец содержит что-то других чем дата. Или, возможно, стоит перевести эти значения даты в отдельный столбец, чтобы иметь более согласованные данные? (Легко предположить, не зная полного контекста вашего приложения, я знаю.)

+0

Хорошо, ваше первое решение работает, потому что тип «timestamp» вместо «integer». Почему в этом случае не работает целое число? – Jonathan

+0

Если вы хотите, чтобы это было целое число, у вас должно получиться целое число SQL: – pat

+0

Право. Я думал, что Сфинкс всегда переводил его в целое ... Спасибо. – Jonathan