Rails SQL:如何在表中的列上搜索,忽略所有特殊字符

时间:2018-09-21 16:29:26

标签: sql ruby-on-rails ruby regex postgresql

我正在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 :(得分:1)

您可以使用正则表达式搜索。

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')