SQLServer 2005没有做正确的事情

时间:2018-05-21 15:19:29

标签: sql-server sql-server-2005

尝试使用Like这样的语句时遇到问题:

首先我有数据表:

Image Data

当我执行Sql命令时,它没有按我想要的那样做。

我的语法:

select * from tbUsers where nUserID like N'%p%';

它没有显示任何结果。虽然我知道'找到任何位置'p'的值'

结果图片:

result

我创建表的代码:

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')

请帮帮我。谢谢。

2 个答案:

答案 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]

您可以查看此问题以获取更多详细信息

How to set collation of a column with SQL?

答案 1 :(得分:2)

由于您使用的是越南语排序规则,因此您无法返回行。您可以非常轻松地在查询中指定排序规则,它将返回您要查找的行。

select * 
from tbUsers 
where nUserID collate SQL_Latin1_General_CP1_CI_AS like N'%p%';