SQL Server 2005 没有做正确的事情

SQLServer 2005 does not do the right thing

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

首先我有数据sheet:

当我执行 Sql 命令时,它没有执行我想要的操作。

我的语法:

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

没有显示任何结果。虽然我知道 'Finds any values ​​that have' p 'in any position'

结果图片:

我创建的代码 table:

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

请帮助我。谢谢。

由于您使用的是越南语排序规则,因此无法取回行。不过,您可以很容易地在查询中指定排序规则,它将 return 您要查找的行。

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

您好,您的问题可能是您的排序规则,如果您出于任何原因需要越南语排序规则,您可以更改查询以在查询中使用排序规则,如下所示:

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

如果不是,我的建议是使用排序规则 SQL_Latin1_General_CP1_CI_AS 重新创建数据库,因为此查询会很慢。

还要考虑到如果您在用户列中使用双 %% 的索引,这将不会让您的索引被使用。如果您只使用 1%,索引将被激活。看看执行计划来回顾一下。

如果想继续使用越南语排序规则,可以将排序规则更改为此类功能所需的列。这将帮助您提高性能。

要更改列的排序规则,请使用

ALTER TABLE MyTable ALTER COLUMN Column1 [TYPE] COLLATE [NewCollation]

你可以看看这个问题了解更多详情

How to set collation of a column with SQL?