Z dokumentacji LIKE (Transact-SQL) :
Odtworzyłem Twój problem w poniższej tabeli:
DECLARE @t TABLE(x NCHAR(25));
INSERT @t SELECT N'nanaS';
SELECT x FROM @t WHERE x LIKE N'%S';
Wynik:
(0 row(s) affected)
Jeśli jednak używasz NVARCHAR
zamiast tego ten problem nie występuje:
DECLARE @t TABLE(x NVARCHAR(25));
INSERT @t SELECT N'nanaS';
SELECT x FROM @t WHERE x LIKE N'%S';
Wyniki:
x
-----
nanaS
Jednak oryginalna tabela nie dała pożądanych wyników, nawet po konwersji do NVARCHAR
w WHERE
klauzula:
DECLARE @t TABLE(x NCHAR(25));
INSERT @t SELECT N'nanaS';
SELECT x FROM @t WHERE CONVERT(NVARCHAR(25),x) LIKE N'%S';
Wynik:
(0 row(s) affected)
Tak więc jednym z potencjalnych obejść byłoby użycie właściwego typu danych w pierwszej kolejności (a także zawsze przedrostek ciągów Unicode N'properly'
. Jeśli nie możesz poprawić typu danych, możesz użyć RTRIM()
obejście opublikowane przez Aushina, ale pamiętaj również o komentarzach HLGEM.