sql-server - 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 吗?
解决方案
要解决第一部分,请执行以下操作:
SELECT lastname, teacherD
FROM test.dbo.table145
WHERE CHARINDEX(LOWER(lastName), LOWER('--'||[teacherD])) = 0
您遇到的问题是 charindex 返回 0,因为它位于位置 0,因此我们在字符串的开头添加了一些不匹配的内容,因此返回的 0 将始终失败。
我不知道你想为第二部分做什么。
推荐阅读
- python - pyinstaller - 冻结应用程序时 QtWebEngineWidgets 抛出 dll 错误
- ios - 标签隐藏很慢
- c# - 我只看到项目模板 blazorserver,为什么我没有看到项目模板 blazor、blazorhosted、blazorlib、blazorserverside?
- python - 在 Open cv 中为彩色图像应用蒙版
- pandas - 处理 Excel 数据时选择 pandas 而不是 xlsxwriter
- opencv - 将 Harcascading 文件与您自己的训练有素的 SVM 文件一起使用
- c - “向存档文件添加索引”是什么意思?
- php - 替换 notFoundHandler 设置
- javascript - 扩展正则表达式以捕获多个条件
- android - 如何修复“Gradle 5.4 需要 Java 8 或更高版本才能运行。您的构建当前配置为使用 Java 7”