SQL Сценарий LIKE Server 2019 с подстановочным знаком не работает, а MySQL в порядке - PullRequest
0 голосов
/ 08 мая 2020

Я использую SQL Server 2019 с таблицами графиков. Мой сценарий возвращает только Id9, в то время как тот же сценарий под MySQL возвращает ID4,8,9 (что является ожидаемым результатом). Я не знаю, почему префикс '%' не работает на SQL сервере.

Вот сценарий:

CREATE TABLE Test([Id] int IDENTITY(1,1) NOT NULL,
                    [FullName] nvarchar(128) NULL,

                    CONSTRAINT [PK_Test_Id] PRIMARY KEY CLUSTERED (Id ASC));

INSERT INTO Test (FullName) VALUES 
(N'F''Sheree Jones II'                 ),
(N'Cybèle'                             ),
(N'T''Junior'                          ),
(N'Urane Of Watson Lake'               ),
(N'J''Sirène De Dan Jourdain'          ),
(N'Goodson des loups de l''antarctique'),
(N'F''Sheree Jones Of Dawson City'     ),
(N'Pénélope Of Watson Lake'            ),
(N'Liubov''s Siren'                    ),
(N'Siréna'                             );

select * from Test where FullName like '%siren%'

Ответы [ 3 ]

2 голосов
/ 09 мая 2020

@ NolmëInformatique, это вариант с использованием возвращающей табличное значение функции:

create function schema_name.function_name (@name nvarchar(100))
returns table
as
return 
(
select FullName from Test 
WHERE FullName COLLATE Latin1_general_CI_AI Like '%'+@name+'%' 
COLLATE Latin1_general_CI_AI
);

Функцию можно вызвать с помощью этого запроса:

select * from schema_name.function_name ('siren');
2 голосов
/ 08 мая 2020

Потому что буква с ударением - это не буква без него. И вы должны учитывать прописные буквы. Попробуйте этот код: select * from Test WHERE upper(FullName) COLLATE Latin1_general_CI_AI Like '%CAFE%' COLLATE Latin1_general_CI_AI

0 голосов
/ 08 мая 2020

Это дополнение к ответу @ Vad1m выше. «Сирена» в вашем столе имеет заглавную букву «S».

Проверить, нечувствителен ли сервер к регистру. Выполните этот запрос:

SELECT SERVERPROPERTY('COLLATION')

Если результат:

SQL_Latin1_General_CP1_CI_AS

CI означает нечувствительность к регистру.

Если нет, вам нужно будет использовать функцию lower() в предложении where.

...