暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 使用Like运算符或正则表达式进行基于名称的搜索

askTom 2017-10-21
228

问题描述

嗨,

当给定值完全匹配或与全名的一部分匹配时,我需要获取所有记录。
例如,当我想获取所有名称为 “john carpenter” 的记录,并且表值为

全名
----------
约翰·卡彭特
木匠约翰

When i try to search this with a basic like operator as 'where lower(full_name) like '%john%carpenter%' ' then only the record with full name='约翰·卡彭特' will be displayed,but i consider the other record with full_name '木匠约翰' is also the same record which i want to fetch.
我如何克服这个问题?
使用正则表达式或任何基本搜索运算符或任何其他方式,我可以尽可能高效地获取搜索
数十万的数据。
提前谢谢!

纳文。

专家解答

如果你想让事情变得灵活,我认为你不可能绕过缓慢的搜索,因为从你输入的内容来看,那么:

John Carpenter
Carpenter John
John S Carpenter
John Peter Carpenter
john CARPENTER
john        CARPENTER
Carpenter Connor John
Steven John Carpenter
复制


等等,这里都是潜在的匹配。

这是一个名为 “全名” 的专栏的缺点之一-然后你在 * 查询 * 时间负责做一些事情,比如对什么是姓氏或名字等做出明智的决定。

一个潜在的选择是一个索引 (FULL_NAME),并使用索引快速全扫描该结构,以获取ROWID,然后返回表的其余数据。你可能需要一些检查来防止巨大的结果集,例如有人搜索 “S”。

任何更有效的东西都将真正进入更改数据模型的领域,或者与名称相关的规则以及如何指定搜索条件 (例如清理空白,中间名等)
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论