Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Kolumny char i nchar programu SQL Server przeszukiwane są inaczej

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Błąd połączenia SQL Server 2008 Żaden proces nie znajduje się na drugim końcu potoku

  2. Czy istnieje sposób na określenie nazwy tabeli jako ciągu?

  3. Fizyczna lokalizacja danych FILESTREAM

  4. Zmień nazwę kolumny w SQL Server (T-SQL)

  5. Automatycznie rozwiąż konflikt scalania kluczy podstawowych