Rails SQL: как искать по столбцу в таблице, игнорируя все специальные символы - PullRequest
0 голосов
/ 21 сентября 2018

Я ищу совпадающие значения в MyTable.

name to search for -> This-is-a (test/with/time)
The name from DB table -> "this-is-a-test-with/time"

Если я могу получить как значение столбца, так и значение поиска для сопоставления с чем-то вроде этого -> "thisisatestwithtime", который игнорирует все специальные символы ипространства.

value = This-is-a (test/with/time)
MyTable.where("upper(name) = upper(?)",value.to_s.scan(/[0-9a-z]/i).join("")).first

Это преобразует значение в форму, в которой удалены все специальные символы, но как я могу запустить то же самое для значения в таблице?

1 Ответ

0 голосов
/ 21 сентября 2018

Вы можете использовать поиск по регулярному выражению.

select * from "table" where "name" ~ 'this' and name ~ 'is' and name ~ 'a' 
and name ~ 'test' and name ~ 'with' and name ~ 'time';

Если вы хотите искать только целые слова (например, найдите -a- вместо cat)

name ~ '\ma\M'

Если регистр не учитывается, используйте

name ~* 'a'

https://www.postgresql.org/docs/9.6/static/functions-matching.html#FUNCTIONS-POSIX-REGEXP

Вы также можете использовать replace, чтобы сопоставить все значения

select * from table where regex_replace(name, '\W', '') = :name

Table.where("regex_replace(name, '\W', '') = :name", name: 'thisisatestwithtime')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...