Sql server 比较多个字符串的T-SQL 2012 charindex不匹配
在SQL Server 2012数据库中,我希望找到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
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后面的逗号或破折号应该对返回值没有影响。您确定这些字符串相同,并且其中一个未使用扩展字符集吗?