尝试使用Like
这样的语句时遇到问题:
首先我有数据表:
当我执行Sql命令时,它没有按我想要的那样做。
我的语法:
select * from tbUsers where nUserID like N'%p%';
它没有显示任何结果。虽然我知道'找到任何位置'p'的值'
结果图片:
我创建表的代码:
Create table tbUsers(
iIDUser int identity(1,1) not null primary key,
nUserID nvarchar(50) null,
nPassWord nvarchar(50) null,
dDate datetime null,
nName nvarchar(50) null
)
INSERT INTO tbUsers(nUserID,nPassword,nName) VALUES('phuc','123456', 'Phuc Nguyen')
INSERT INTO tbUsers(nUserID,nPassword) VALUES('ngocanh','123456')
INSERT INTO tbUsers(nUserID,nPassword) VALUES('long','123456')
INSERT INTO tbUsers(nUserID,nPassword) VALUES('long%ngocanh','123456')
INSERT INTO tbUsers(nUserID,nPassword) VALUES('phuc nguyen','123456')
请帮帮我。谢谢。
答案 0 :(得分:3)
如果您因任何原因需要进行越南排序规则,您的问题可能是您的排序规则,您可以更改查询以在查询中使用排序规则,如下所示:
select *
from tbUsers
where nUserID collate SQL_Latin1_General_CP1_CI_AS like N'%p%';
如果不是我的建议是使用排序规则SQL_Latin1_General_CP1_CI_AS重新创建数据库,因为此查询将很慢。
另外,如果您在用户列中使用double %%的索引,则不会考虑使用您的索引。如果仅使用一个%,则将激活索引。查看执行计划以查看此内容。
如果希望继续使用越南语排序规则,可以将排序规则更改为此类功能所需的列。这将有助于您的表现。
要更改列的排序规则,请使用
ALTER TABLE MyTable ALTER COLUMN Column1 [TYPE] COLLATE [NewCollation]
您可以查看此问题以获取更多详细信息
答案 1 :(得分:2)
由于您使用的是越南语排序规则,因此您无法返回行。您可以非常轻松地在查询中指定排序规则,它将返回您要查找的行。
select *
from tbUsers
where nUserID collate SQL_Latin1_General_CP1_CI_AS like N'%p%';