我在数据库中设置了以下排序规则:
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。
答案 0 :(得分:1)
最简单的方法是简单地指定一个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来将字符串解释为区分大小写的排序规则即可。
答案 1 :(得分:0)
这里有几个主意
LOWER()
),因此您不必担心混合大小写[a-z]
拥有[a-zA-Z]
答案 2 :(得分:0)
可以使用LIKE
和LOWER
返回car
,而无论大小写如何,car_
都可以返回_
,其中declare @table table (c1 varchar(64))
insert into @table
values
('car'),
('CAR'),
('car.'),
('Car!'),
('carrot'),
('carrier'),
('car1'),
('Firstcar'),
('1car'),
('cars'), --i added this value to NOT be returned
('carcarcar')
select *
from @table
where
lower(c1) = 'car'
or (lower(c1) like ('car_')
and right(c1,1) like ('[^0-9]')
and right(lower(c1),1) like ('[^a-z]'))
是任何非字母数字值。
*** arch - x64
c:/Rtools/mingw_64/bin/g++ -shared -s -static-libgcc -o tiltmod.dll tmp.def RcppExports.o UBMM.o -Ld:/Compiler/gcc-4.9.3/local330/lib/x64 -Ld:/Compiler/gcc-4.9.3/local330/lib -LC:/PROGRA~1/R/R-33~1.1/bin/x64 -lR
C:\Rtools\mingw_32\bin\nm.exe: C:/Users/chongma/Documents/Academic Archive/C++ practice/Rcpp2/tiltmod/tiltmod.Rcheck/00_pkg_src/tiltmod/src-x64/RcppExports.o: File format not recognized
C:\Rtools\mingw_32\bin\nm.exe: C:/Users/chongma/Documents/Academic Archive/C++ practice/Rcpp2/tiltmod/tiltmod.Rcheck/00_pkg_src/tiltmod/src-x64/UBMM.o: File format not recognized