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

Sql server 比较多个字符串的T-SQL 2012 charindex不匹配,sql-server,tsql,sql-server-2012,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

在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 
如果可能,用户还希望检查lastname的一部分是否包含在
teacherID
中。以下是我所指的一些例子:

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

请给我看一些关于如何解决第1部分和第2部分的SQL,好吗?

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

SELECT lastname, teacherD
FROM test.dbo.table145    
WHERE CHARINDEX(LOWER(lastName), LOWER('--'||[teacherD])) = 0 
您遇到了charindex返回0的问题,因为它位于位置0,所以我们在字符串的开头添加了不匹配的内容,因此返回的0将始终是失败的


我不知道你想为第二部分做什么。

你能给出一个积极的例子,说明它在哪里起作用吗?你可以使用
检查姓氏是否不存在。。。其中,教师不喜欢“%”+lastname+“%”
。不清楚这是否是你想要的。我不想一直失败。比如说。”不应从上述查询中选择LastName中的“smith”和teacherD中的“smith,darell”“史密斯”是“史密斯,达雷尔”的一个子集。基本上,如果“Smith”是“Smith,Darell”的一部分,则不应选择该记录。作为选择的一部分,上述逻辑不需要包括Smith。逗号使该记录被选中。因此,您是否可以向我展示sql以满足我的需求?谢谢你的帮助@user1816979——您的注释毫无意义,因为字符串smith后面的逗号或破折号应该对返回值没有影响。您确定这些字符串相同,并且其中一个未使用扩展字符集吗?