我在 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'?
答案 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
中是否有引号
这会影响查询的性能,所以我希望表中没有数百万行