SQL Server 2008 R2 内连接无法匹配 varchar 字段,因为它包含特殊字符

标签 sql sql-server-2008-r2 inner-join keyword

我们正在将 Microsoft SQL Server 2008 R2 用于我们的经典 ASP 应用程序之一。

我们有两个表:

  • 表A
  • 表B

TableA 具有以下列:

  • InstName(varchar[1024])

TableB 具有以下列:

  • 机构名称(varchar[1024])

但是,我们发现了一些如下数据

表A

InstName 值为南特大学 [ Universites de Nantes ]

表B

InstitutionName 值为 University of Nantes [ Universites de Nantes ]

我们需要对上述两个表运行内连接选择查询:

select *
from TableA
inner join TableB on TableA.InstName LIKE TableB.InstitutionName

遗憾的是,此内部联接无法将列与南特大学 [ Universites de Nantes ] 的值相匹配

我确实知道“[]”方括号在 Microsoft SQL Server 2008 R2 中具有特殊含义。

请修改所述内连接选择查询,使其转义“[]”方括号,以便找到匹配项,并将所述修改后的查询粘贴到此 stackoverflow.com 票证上。

此外,请告知我应该如何处理其他特殊字符,例如在 Microsoft SQL Server 2008 R2 中具有特殊含义的“[]”方括号。

最佳答案

如果您需要使用包含 [LIKEJOIN 两个字段,则需要转义左括号,因为括号是通配符。对于任何通配符,您可以使用括号 [] - 这将搜索指定范围内的任何单个字符。

例如,这应该适用于您使用 REPLACE 的场景:

select * 
from yourtable t inner join 
    yourtable2 t2 on t.field like replace(t2.field,'[', '[[]')

或者,对于您的示例数据,您没有理由使用 LIKE,因为 = 的工作原理相同。

关于SQL Server 2008 R2 内连接无法匹配 varchar 字段,因为它包含特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23771776/

相关文章:

sql - INNER JOIN 性能与 '<' 或 '>' 条件

java - 不使用聚合函数删除sql中的重复项

php - 如何使用 'where' 等 Eloquent 方法从对象/集合中获取特定日期

从A点到B点的mysql正则表达式

sql - 如果 SQL 中存在语句超时

sql-server - 是什么不断清除我的 SQL Server 计划缓存?

MySQL 全内连接

.net - 错误 175 : The specified store provider cannot be found in the configuration, 或无效

SQL Server - 查找订单最多的前 n 个客户

MySQL 内部连接 ​​2 列