格式不同时使用 LIKE 子句

问题描述

我得到了一个带有姓名的患者列表,我正在尝试与我们数据库中已有的列表进行匹配,但由于患者列表中姓名字段的格式,我遇到了问题。此列表取自网络表单,因此人们可以随意输入姓名,因此不会很好地匹配。

WEBFORM_NAME PATIENT_NAME
约翰·史密斯 SMITH,JOHN L
香农布朗 布朗,香农玛丽

有没有办法在这样的实例中使用 LIKE 子句?我真正需要的是 LIKE 子句来查找名字,因为我已经加入了电话号码和电子邮件地址。我的问题是当家庭拥有相同的电话号码和电子邮件地址(例如配偶)时,我只想返回家庭中合适的人。

解决方法

不确定您是否只需要获取名字,这里是获取名字的 WIldCard 表达式

SELECT LEFT(WEBFORM_NAME,CHARINDEX(' ',WEBFORM_NAME)-1) AS FirstName1,SUBSTRING(PATIENT_NAME,CHARINDEX(',',PATIENT_NAME)+1,(CHARINDEX(' ',PATIENT_NAME)-CHARINDEX(',PATIENT_NAME))) AS FirstName2
FROM yourTable
,

这里的假设似乎是网络表单(用户将手动输入)名称的格式为 <First Name> [<optional middle Name(s)>] <Last Name>,其中存储在表中的数据的格式为 <Last Name>,<First Name> [<optional middle Name(s)>] .这不是一门精确的科学,但由于其他标准(如电子邮件、电话等)已匹配最佳情况

select * 
from webform w,patient p
where
  -- extract just the last name and match that 
  regexp_like(p.name,'^' || 
         regexp_extract(w.name,'([^[:space:],][[:space:],])*([^[:space:],]+)',1,2))
  and -- extract the first name and match it
    regexp_like(p.name,[[:space:]]*' ||
                   regexp_extract(w.name,'(^[^[:space:],]+)'))          

由于网络表单是自由形式的用户输入,因此很难处理缩写的中间名和其他变体,因此使用上述内容将进行基于名字和姓氏的匹配,除了您已经在进行的匹配之外,这应该会有所帮助。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...