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

时间:2019-07-19 07:53:34

标签: sql sql-server where-clause

我在 SQL Server

上进行查询时遇到以下问题

我有一个简单的查询:

SELECT *
FROM [PROT_UTENTI]
WHERE 
    Nome = 'Paolo D''Aannuntis'
通过 Nome 字段找到用户的

(代表名称和姓氏,我知道,这很可怕,但是我不能更改数据库,因为它是生产中的旧旧应用程序)

如您所见,姓氏( D'Annuntis )包含'字符(我通过加倍了“”来对其进行了转义)。

问题是我正在使用 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 ='保罗D'Aannuntis'

1 个答案:

答案 0 :(得分:2)

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

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中是否有引号

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