sql >> Databáze >  >> RDS >> Sqlserver

Sloupce char a nchar SQL Server prohledávají odlišně

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.



  1. Spring Boot REST · @Constraint for delete?

  2. Propojení MySQL s DBVisualizer

  3. Jak vytvořit rozdělenou sekvenci PostgreSQL?

  4. Agregační funkce pro získání rozdílu nebo poměru dvou řádků v pořadí