首页 > 解决方案 > T-SQL 2012 charindex比较几个字符串不匹配

问题描述

在 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 吗?

标签: sql-servertsqlsql-server-2012

解决方案


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

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

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

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


推荐阅读