Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Các cột char và nchar của SQL Server tìm kiếm khác nhau

Từ tài liệu cho LIKE (Transact-SQL) :

Tôi đã tái tạo sự cố của bạn với bảng sau:

DECLARE @t TABLE(x NCHAR(25));
INSERT @t SELECT N'nanaS';
SELECT x FROM @t WHERE x LIKE N'%S';

Kết quả:

(0 row(s) affected)

Tuy nhiên, nếu bạn sử dụng NVARCHAR thay vào đó, sự cố này không xảy ra:

DECLARE @t TABLE(x NVARCHAR(25));
INSERT @t SELECT N'nanaS';
SELECT x FROM @t WHERE x LIKE N'%S';

Kết quả:

x
-----
nanaS

Tuy nhiên, bảng gốc không tạo ra kết quả mong muốn ngay cả khi chuyển đổi thành NVARCHAR trong WHERE mệnh đề:

DECLARE @t TABLE(x NCHAR(25));
INSERT @t SELECT N'nanaS';
SELECT x FROM @t WHERE CONVERT(NVARCHAR(25),x) LIKE N'%S';

Kết quả:

(0 row(s) affected)

Vì vậy, một giải pháp tiềm năng sẽ là sử dụng đúng loại dữ liệu ngay từ đầu (và cũng luôn đặt tiền tố chuỗi Unicode N'properly' . Nếu bạn không thể làm cho kiểu dữ liệu chính xác, bạn có thể sử dụng RTRIM() giải pháp được đăng bởi Aushin, nhưng hãy ghi nhớ các nhận xét của 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. Tên đối tượng không hợp lệ SQL Server 2008 R2 - Quy trình đã lưu trữ

  2. Cách dễ nhất để khác biệt hai lược đồ bảng trong SQL Server 2008?

  3. Xóa tài khoản thư cơ sở dữ liệu khỏi hồ sơ (SSMS)

  4. Gọi thủ tục được lưu trữ với tham số có giá trị bảng từ java

  5. Chọn 30 ngày qua với truy vấn sql