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.