T-SQL 2012 charindex比较多个字符串不匹配

时间:2018-12-27 20:22:36

标签: sql-server tsql sql-server-2012

在SQL Server 2012数据库中,我想查找lastname至少不是teacherD列的“一部分”的所有记录。

以下SQL大约有90%的时间有效:

SELECT lastname, teacherD
FROM test.dbo.table145    
WHERE CHARINDEX(LOWER(lastName), LOWER([teacherD])) = 0 

问题是有时teacherD列旁边的时间带有特殊字符。上面的SQL认为有区别。

以下是存在问题的示例

lastname       teacherD  
--------------------------------
smith          smith, darell
smith          smith-bright joan 

如果可能,用户还希望检查teacherID中是否包含姓氏的一部分。以下是一些我所指的示例:

lastname       teacherD
------------------------------------
corbly-tip     corbly, annette b
baker-hage     cubs - bakerhage - 8c
king grie      king, bev  

请您教我一些有关如何解决第1部分和第2部分问题的SQL吗?

1 个答案:

答案 0 :(得分:1)

要解决第一部分,请执行以下操作:

SELECT lastname, teacherD
FROM test.dbo.table145    
WHERE CHARINDEX(LOWER(lastName), LOWER('--'||[teacherD])) = 0 

您遇到的问题是charindex返回0,因为它位于位置0,所以我们在字符串的开头添加了一些不匹配的内容,因此返回0总是失败。

我不知道第二部分要做什么。