Parent question - 感谢Iamdave,部分问题得以解决。现在的挑战是,在已经设置以下排序规则的数据库中使搜索不区分大小写:COLLATE Latin1_General_CS_AS
我正在使用此查询,但它不起作用-无法匹配测试,测试,只能匹配TEST
UPDATE dbo.BODYCONTENT
SET BODY = LTRIM(RTRIM(REPLACE(
REPLACE(
REPLACE(N' ' + CAST(BODY AS NVARCHAR(MAX))
+ N' ', ' ', '<>'), '>TEST<', '>Prod<'), '<>', ' ')))
FROM dbo.BODYCONTENT
WHERE BODY COLLATE Latin1_General_CI_AS LIKE '%TEST%' COLLATE Latin1_General_CI_AS;
如何在replace函数中使搜索字符串不区分大小写
其他查询和结果:
UPDATE dbo.BODYCONTENT SET BODY =
ltrim(rtrim(replace(replace(
replace(N' ' + cast(BODY as nvarchar(max)) + N' ' ,' ','<>')
,'>Test<','>Prod<),'<>',' ')))
from dbo.BODYCONTENT WHERE lower(BODY) like '%test%';
结果:参数数据类型ntext对于下级函数的参数1无效。
答案 0 :(得分:1)
根据评论,仅使用LOWER
where lower(body) like '%test%'
答案 1 :(得分:0)
您在那里拥有的应该可以正常工作,除非有一些假设被排除在问题之外(例如未像您认为的那样进行整理,或者实际上没有测试行。
您可以通过几种方法执行此操作。正如scsimon所指出的,您可以简单地进行小写比较。这可能是最直接的方法。
您还可以像执行操作一样显式整理该列。不过,您不必特别整理'%TEST%'
字符串(除非我弄错了;在我的机器上没有必要。我想默认的数据库设置可能会否定此参数)。
最后,另一个选择是在表上有一个计算列,这是该字段的不区分大小写的版本。基本上与先前的方法相同,但是它是表定义的一部分。
declare @t table
(
body nvarchar(max) collate Latin1_General_CS_AS,
body_Insensitive as body collate Latin1_General_CI_AS
)
insert into @t
values ('test'), ('Test'), ('TEST')
select * from @t where BODY collate Latin1_General_CI_AS like '%test%' collate Latin1_General_CI_AS;
select * from @t where lower(body) like '%test%'
select * from @T where body_Insensitive like '%TeSt%'