Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Server char и nchar колоните търсят по различен начин

От документацията за 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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да съпоставите множество дялове в една файлова група в SQL Server (T-SQL)

  2. Конфигурирайте SQL задания в SQL Server с помощта на T-SQL

  3. Как да определим броя на дните в месеца в SQL Server?

  4. Преобразувайте „smalldatetime“ в „datetime“ в SQL Server (T-SQL примери)

  5. Как да премахнете двойните кавички около текста, докато импортирате CSV файл?