我在查询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 = '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
这会影响查询的性能,所以我希望你的表中没有数百万行
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句