Z dokumentace pro LIKE (Transact-SQL) :
Váš problém jsem reprodukoval pomocí následující tabulky:
DECLARE @t TABLE(x NCHAR(25));
INSERT @t SELECT N'nanaS';
SELECT x FROM @t WHERE x LIKE N'%S';
Výsledek:
(0 row(s) affected)
Pokud však použijete NVARCHAR
místo toho tento problém nenastane:
DECLARE @t TABLE(x NVARCHAR(25));
INSERT @t SELECT N'nanaS';
SELECT x FROM @t WHERE x LIKE N'%S';
Výsledky:
x
-----
nanaS
Původní tabulka však nepřinesla požadované výsledky ani při převodu na NVARCHAR
v WHERE
klauzule:
DECLARE @t TABLE(x NCHAR(25));
INSERT @t SELECT N'nanaS';
SELECT x FROM @t WHERE CONVERT(NVARCHAR(25),x) LIKE N'%S';
Výsledek:
(0 row(s) affected)
Jedním z potenciálních řešení by tedy bylo použít na prvním místě správný datový typ (a také vždy předponovat řetězce Unicode N'properly'
. Pokud nemůžete nastavit správný datový typ, můžete použít RTRIM()
řešení, které zveřejnil Aushin, ale mějte na paměti také komentáře HLGEM.