sql-server - 如何在排序规则集 SQL Server 数据库中匹配不区分大小写的确切单词
问题描述
我的数据库中设置了以下排序规则:
COLLATE SQL_Latin1_General_CP1_CS_AS
我想匹配一个确切的单词 - 不区分大小写。我正在使用以下查询,但它不起作用。
String sql = "UPDATE BODYCONTENT SET BODY = CAST(REPLACE(CAST(BODY as nvarchar(max)), ? , ?) as ntext) WHERE BODY like '%[^a-z0-9]' + ? + '[^a-z0-9]%' OR" +
" BODY like ? + '[^a-z0-9]%' OR" +
" BODY like '%[^a-z0-9]' + ? OR" +
" BODY like ?";
当我在另一个未设置排序规则的数据库中使用类似的东西时,结果如预期:
select *
from dbo.persons
where LastName like '%[^a-z0-9]Dan[^a-z0-9]%'
or LastName like 'Dan[^a-z0-9]%'
or LastName like '%[^a-z0-9]Dan'
or LastName like 'Dan';
请让我知道如何处理设置排序规则的数据库。
如何匹配一个确切的单词 - 不区分大小写。
示例:我想匹配这些单词:
car
CAR
car.
Car!
我不想匹配这些词:
carrot
carrier
car1
Firstcar
1car
carcarcar
数据库是 SQL Server。
解决方案
最简单的方法是简单地指定一个 COLLATION。这是一个例子:
SELECT 'True' WHERE 'x' COLLATE Latin1_General_CI_AI = 'X' COLLATE Latin1_General_CI_AI
SELECT 'True' WHERE 'x' COLLATE Latin1_General_CS_AS = 'X' COLLATE Latin1_General_CS_AS
请注意,当您运行这两个语句时,它们中只有一个返回“True”......不区分大小写的版本。您的数据库是什么排序规则也无关紧要,因为您正在使用显式排序规则覆盖该排序规则。
使用上面的示例,它将是这样的:
select *
from dbo.persons
where LastName COLLATE Latin1_General_CS_AS like '%Dan%' COLLATE Latin1_General_CS_AS;
这将执行区分大小写的搜索,仅匹配“Dan”在姓氏中某处的位置。
COLLATE 语句类似于特定排序规则的 CAST()。因此,当您的数据库默认不区分大小写时,只需使用 COLLATE 将字符串解释为区分大小写的排序规则。
推荐阅读
- python - 为嵌套字典中的空列表设置值
- prometheus - 如何查看已为 Pushgateway 生成数据的实例的主机名
- python - 由于 TensorFlow 错误,无法完成 Rasa 初始模块的训练
- reactjs - 当一切正常时,会出现错误提示:`style` 属性需要从样式属性到值的映射(Reactjs)
- python - 在时钟上使用红外遥控器在模式之间切换
- python - 使用 Altair 绘制地理数据框时出现问题
- android - Android admob sdk 在广告不可见的情况下调用 onAdImpression
- javascript - 在按钮上使用平滑滚动插件
- sql - EXECUTE IMMEDIATE DROP FUNCTION 导致 Oracle SQL Developer 挂起
- node.js - Loopback 3 顺序、偏移量和限制。操作顺序