От документацията за LIKE (Transact-SQL) :
Възпроизвеждам вашия проблем със следната таблица:
DECLARE @t TABLE(x NCHAR(25));
INSERT @t SELECT N'nanaS';
SELECT x FROM @t WHERE x LIKE N'%S';
Резултат:
(0 row(s) affected)
Ако обаче използвате NVARCHAR
вместо това този проблем не възниква:
DECLARE @t TABLE(x NVARCHAR(25));
INSERT @t SELECT N'nanaS';
SELECT x FROM @t WHERE x LIKE N'%S';
Резултати:
x
-----
nanaS
Оригиналната таблица обаче не доведе до желаните резултати дори при преобразуване в NVARCHAR
в WHERE
клауза:
DECLARE @t TABLE(x NCHAR(25));
INSERT @t SELECT N'nanaS';
SELECT x FROM @t WHERE CONVERT(NVARCHAR(25),x) LIKE N'%S';
Резултат:
(0 row(s) affected)
Така че едно потенциално решение би било да се използва правилният тип данни на първо място (и също така винаги да се префикс Unicode низове N'properly'
. Ако не можете да направите типа данни правилен, можете да използвате RTRIM()
заобиколно решение, публикувано от Aushin, но имайте предвид и коментарите на HLGEM.