在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吗?
答案 0 :(得分:1)
要解决第一部分,请执行以下操作:
SELECT lastname, teacherD
FROM test.dbo.table145
WHERE CHARINDEX(LOWER(lastName), LOWER('--'||[teacherD])) = 0
您遇到的问题是charindex返回0,因为它位于位置0,所以我们在字符串的开头添加了一些不匹配的内容,因此返回0总是失败。
我不知道第二部分要做什么。