SQLServer 2005 не делает правильные вещи - PullRequest
0 голосов
/ 21 мая 2018

У меня проблема при попытке с 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 голосов
/ 21 мая 2018

Привет, вашей проблемой может быть ваша сортировка, если вам нужна вьетнамская сортировка по любой причине, вы можете изменить свой запрос, чтобы использовать сортировку в своем запросе, например так:

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]

Вы можете посмотреть на этот вопрос для получения более подробной информации

Как настроить сопоставление столбца с SQL?

0 голосов
/ 21 мая 2018

Так как вы используете вьетнамскую сортировку, вы не получаете обратно строки.Вы можете легко указать параметры сортировки в своем запросе, и он вернет искомые строки.

select * 
from tbUsers 
where nUserID collate SQL_Latin1_General_CP1_CI_AS like N'%p%';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...