sql - 如何在 SQL Server where 子句中忽略 ' 字符?
问题描述
我在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
这会影响查询的性能,所以我希望你的表中没有数百万行
推荐阅读
- flask - 出现错误:“错误 [root] 错误:不支持 ALTER 在 SQLite 方言中的约束”运行“flask db upgrade”时
- f# - F#找到偶数的第一个出现
- android - RecyclerView inside MotionLayout :错误处理滚动;未找到 id -1 的指针索引。是否跳过了任何 MotionEvents?
- android - 如何将android视图文本动态更改为大写和小写
- node.js - 使用 mongo 查询更新 json 数组的最佳方法
- mysql - Mysql:相同的查询,相同数量的结果行,没有连接,慢 10 倍?
- php - 无法比较在 php 中创建的 cookie 的时间
- mysql - 从 MySQL 8.0.16 迁移到 MySQL 5.5 - 错误的重音和特殊字符
- node.js - Socket.io why very slow?
- react-native - Snapshot unit test fail for react-native-modal-datetime-picker