【发布时间】:2013-11-19 19:30:38
【问题描述】:
我有两列可能包含相似的数据,我正在尝试找出如何比较两者的相似性。
TABLE:
PatientID | InsurnaceCompany1 | InsuranceCompany2
111111111 | Medicaid | Medicaid - Part D
222222222 | Medicaid - ABC Co | Medicaid
333333333 | Medicaid - ABC Co | Medicaid - Part D
444444444 | MVP Insurance | MVP
555555555 | Medicare | Medicaid
666666666 | Medicaid | MVP
777777777 | Private - MVP | MVP Option
问题是, 如何比较两列以了解它们是否相似。
结果应该是这样的:
PatientID | InsurnaceCompany1 | InsuranceCompany2 | Result
111111111 | Medicaid | Medicaid - Part D | TRUE
222222222 | Medicaid - ABC Co | Medicaid | TRUE
333333333 | Medicaid - ABC Co | Medicaid - Part D | TRUE
444444444 | MVP Insurance | MVP | TRUE
555555555 | Medicare | Medicaid | FALSE
666666666 | Medicaid | MVP | FALSE
777777777 | Private - MVP | MVP Option | TRUE
我可以使用 case 语句来检查其中的几个选项,例如:
case
when InsuranceCompany1 like '%' + InsuranceCompany2 + '%' then 'TRUE'
when InsuranceCompany2 like '%' + InsuranceCompany1 + '%' then 'TRUE'
else 'FALSE'
end AS Result
但对于上述 PatientID 333333333 和 777777777,此测试失败。
为了澄清起见,我将“相似”定义如下:如果两个术语都包含相同的词,则它们是相似的。即使这个词是通用词(例如“insurance”)也适用。因此,“Insurance Company B”与“Insurance Company A”相似,原因有两个:“Insurance”和“Company”。
【问题讨论】:
-
你如何定义“相似”?
-
如果第一个保险公司的任何部分(单词)在第二个保险公司中,反之亦然。即:如果“医疗补助”出现在两列的某处,那么它们是相似的。同样,如果“MVP”出现在两列中的某处,那么它们是相似的。
-
如果“保险”出现在两列怎么办?
-
如果没有存储过程,我不知道该怎么做。
-
如果“保险”出现在两者中,我会接受正确的答案。理想情况下不会,但对我来说是可以接受的。
标签: sql case string-comparison