Làm thế nào để bạn so sánh các chuỗi để so sánh là đúng chỉ khi các trường hợp của mỗi chuỗi là bằng nhau. Ví dụ:
Select * from a_table where attribute = 'k'
... sẽ trả về một hàng có thuộc tính 'K'. Tôi không muốn hành vi này.
Làm thế nào để bạn so sánh các chuỗi để so sánh là đúng chỉ khi các trường hợp của mỗi chuỗi là bằng nhau. Ví dụ:
Select * from a_table where attribute = 'k'
... sẽ trả về một hàng có thuộc tính 'K'. Tôi không muốn hành vi này.
Câu trả lời:
Select * from a_table where attribute = 'k' COLLATE Latin1_General_CS_AS
Đã lừa
Latin1_General_CS_AS
là một đặc điểm kỹ thuật của đối chiếu. Đối chiếu đề cập đến một bộ quy tắc xác định cách sắp xếp và so sánh dữ liệu. Xem trang này để biết thêm thông tin.
Bạn cũng có thể chuyển đổi thuộc tính đó theo phân biệt chữ hoa chữ thường bằng cú pháp này:
ALTER TABLE Table1
ALTER COLUMN Column1 VARCHAR(200)
COLLATE SQL_Latin1_General_CP1_CS_AS
Bây giờ tìm kiếm của bạn sẽ được phân biệt chữ hoa chữ thường .
Nếu bạn muốn làm cho trường hợp cột đó không nhạy cảm nữa, thì hãy sử dụng
ALTER TABLE Table1
ALTER COLUMN Column1 VARCHAR(200)
COLLATE SQL_Latin1_General_CP1_CI_AS
Bạn có thể dễ dàng Chuyển đổi các cột thành VARBINARY (Độ dài tối đa), Độ dài phải là mức tối đa bạn mong muốn để tránh so sánh bị lỗi, Nó đủ để đặt độ dài làm độ dài cột. Cột Trim giúp bạn so sánh giá trị thực ngoại trừ không gian có ý nghĩa và có giá trị trong các cột trong bảng của bạn, Đây là một mẫu đơn giản và như bạn có thể thấy tôi Cắt giá trị cột rồi chuyển đổi và so sánh.
CONVERT(VARBINARY(250),LTRIM(RTRIM(Column1))) = CONVERT(VARBINARY(250),LTRIM(RTRIM(Column2)))
Hy vọng điều này giúp đỡ.
Cũng giống như một cách khác, bạn có thể sử dụng HASHBYTES, đại loại như thế này:
SELECT *
FROM a_table
WHERE HASHBYTES('sha1', attribute) = HASHBYTES('sha1', 'k')