繁体   English   中英

如何忽略SQL Server where子句中的'字符?

[英]How can I ignore the ' character into a SQL Server where clause?

我在SQL Server上的查询有以下问题

我有这个简单的查询:

SELECT *
FROM [PROT_UTENTI]
WHERE 
    Nome = 'Paolo D''Aannuntis'

它通过Nome字段查找用户(我知道这代表名称和姓氏,这很可怕,但我不能更改DB,因为它是生产中的旧旧应用程序)。

如您所见,姓( D'Annuntis )包含'字符(我通过加倍''来使它转义)。

问题是我正在使用Nome值从另一个数据库(涉及迁移过程)中提取该Nome值来执行此查询,在该数据库中保存了相同的Nome字段而没有'字符到姓氏中。

所以我正在执行此查询:

SELECT *
FROM [PROT_UTENTI]
WHERE 
    Nome = 'Paolo DAannuntis'

代替

SELECT *
FROM [PROT_UTENTI]
WHERE 
    Nome = 'Paolo D''Aannuntis'

找到0个结果。

我的问题是:有一种方法可以忽略“,因此where子句Nome ='Paolo DAannuntis'可以找到相同的结果Nome ='Paolo D''Aannuntis'

您可以在搜索查询中将任何'替换为'

SELECT *
FROM   [PROT_UTENTI]
WHERE  replace(Nome, '''', '') = 'Paolo DAannuntis'

您也可以在两侧进行替换

WHERE  replace(Nome, '''', '') = replace('Paolo D''Aannuntis', '''', '')

您写道,该值是从迁移中的另一个数据库推导出来的,
所以我想你会有一个变量。

declare @nome varchar(100) = 'Paolo D''Aannuntis' -- filled by your process

SELECT *
FROM   [PROT_UTENTI]
WHERE  replace(Nome, '''', '') = replace(@nome, '''', '')

这将找到您的行,无论变量或[PROT_UTENTU].nome是否有引号。

这将影响查询的性能,所以我希望表中没有数百万行

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM