SQL-запрос Rails / Rails3, "LIKE" не работает с datetime правильно? - PullRequest
1 голос
/ 11 февраля 2011

Действительно ли SQL-запросы rails действительно совместимы с datetime?

Например, если я сделаю:

User.where("email LIKE ?", "%.com%")

Я бы ожидал (и выполняю) возврат списка всех пользователей садрес электронной почты ".com".

Однако, если я это сделаю:

User.where("created_at LIKE ?","%2011%")

Я ничего не получу, даже если вижу, что в этом году были созданы пользователи.На самом деле, иногда мне возвращают бред (например, я могу получить вещи (казалось бы, ничего общего) обратно на% 20%, но ничего не вернуть на% 30%, даже если я знаю, что есть даты с 30 в них)), что заставляет меня думать, что «LIKE» применяется к чему-то, что я не вижу / не интересуюсь (возможно, какой-то идентификатор?)

LIKES только для строки?Есть ли какой-нибудь способ, которым я могу сделать что-то подобное для даты и времени, в rails (я уверен, что есть какой-то способ сделать это в mysql, но может ли rails также справиться с этим?)

В частности, я хочу использовать этов объеме, аналогичном:

 scope :by_date, lambda {|date| where("created_at LIKE ?",date)}

Ответы [ 2 ]

2 голосов
/ 12 февраля 2011
dt = Date.new(2011,1,1)
User.where(['created_at >= ? AND created_at < ?',dt,dt+1.year])

производит

SELECT "users".* FROM "users" WHERE (created_at >= '2011-01-01' AND created_at < '2012-01-01')

Какой способ обработки даты лучше ИМХО

1 голос
/ 11 февраля 2011

IIRC, значения даты и времени хранятся в виде целых чисел.Оператор LIKE работает со строками.

Вы можете попробовать использовать CONVERT () или CAST () или даже CONCAT ().

Что-то вроде:

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