我正在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
这会将值转换为除去所有特殊字符的形式,但如何在表中的值上运行相同的值?
答案 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')