Поиск в Postgres даты, которая может возвращаться 2-6-1992 при поиске 6.06.1992 - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть поле поиска текстового типа, где пользователь может написать что-нибудь, например, ID, Имя или Дата

Я создаю sql для поиска, который работает нормально.Но для даты она выбирает запись с date_of_birth: 02-06-1992, только если я ищу в определенной последовательности, то есть 1992-06-02 или 02-06

def search_patient(search)
  " (
    (first_name ILIKE '#{search}%' )
    OR
    (last_name ILIKE '#{search}%' )
    OR
    (id.value = '#{search}' )
    OR
    CAST(date_of_birth AS varchar) like '%#{search}%'
  ) "
end

Я хочу сделать что-то, что 2/6 /1992 может вернуть 02-06-1992, есть ли функция поиска даты, которая позволяет мне это делать?

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

Вы можете просто проверить, является ли текст в поле поиска действительной датой или нет.Затем вы можете добавить свой запрос даты в ваш основной запрос.

def search_patient(search)
  date_term = DateTime.parse search rescue nil
  dob_query = ''
  if date_term
    dob_query = " OR
                (CAST(date_of_birth AS varchar) = '#{search}')"
  end

  " (
      (first_name ILIKE '#{search}%')
      OR
      (last_name ILIKE '#{search}%')
      OR
      (id.value = '#{search}')
      #{dob_query}
   ) "
end
0 голосов
/ 28 сентября 2018

Я бы посоветовал вам оставить тип данных от date_of_birth до date.Тогда запрос может быть таким:

def search_patient(search)
  Patient.where( "first_name ILIKE ? OR last_name ILIKE ? OR id.value = ? OR Date.parse(date_of_birth) = ?",
                 "%#{search}%", "%#{search}%", "%#{search}%", Date.parse("%#{search}%"))
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...