我需要使用某种模糊搜索来搜索数据库表,就像来自oracle并使用索引一样,因为我不想进行表扫描(有很多数据)。
我想忽略大小写,语言特殊的东西(ñ,ß,...)和特殊字符,如_,(), - 等...
搜索“maria(cool)”应该将“maria-COOL”和“María_Cool”作为匹配。
这在甲骨文中是否可能以某种方式实现?
关于这种情况,我认为可以解决直接用小写创建索引并且搜索总是低级的。但我不知道如何解决特殊字符的问题 我想在没有特殊字符的情况下将数据存储在一个单独的列中并搜索那些返回真实数据的数据,但我并不是100%确定哪里是完美的解决方案。
有什么想法吗?
答案 0 :(得分:3)
也许UTL_MATCH可以提供帮助。
但是你也可以创建一个基于函数的索引,比如说:
regexp_replace(your_column, '[^0-9a-zA-Z]+', ' ')
并尝试匹配:
...
WHERE regexp_replace(your_column, '[^0-9a-zA-Z]+', ' ') =
regexp_replace('maria (cool)' , '[^0-9a-zA-Z]+', ' ')
Here is a sqlfiddle demo这不完整,但可以是一个开始