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