คุณจะเปรียบเทียบสตริงได้อย่างไรเพื่อให้การเปรียบเทียบนั้นเป็นจริงเฉพาะถ้ากรณีของสตริงแต่ละรายการเท่ากัน ตัวอย่างเช่น:
Select * from a_table where attribute = 'k'
... จะส่งคืนแถวที่มีแอตทริบิวต์ 'K' ฉันไม่ต้องการพฤติกรรมนี้
คุณจะเปรียบเทียบสตริงได้อย่างไรเพื่อให้การเปรียบเทียบนั้นเป็นจริงเฉพาะถ้ากรณีของสตริงแต่ละรายการเท่ากัน ตัวอย่างเช่น:
Select * from a_table where attribute = 'k'
... จะส่งคืนแถวที่มีแอตทริบิวต์ 'K' ฉันไม่ต้องการพฤติกรรมนี้
คำตอบ:
Select * from a_table where attribute = 'k' COLLATE Latin1_General_CS_AS
ทำเคล็ดลับ
Latin1_General_CS_AS
เป็นข้อมูลจำเพาะของการเปรียบเทียบ การเรียงหน้าหมายถึงชุดของกฎที่กำหนดวิธีการเรียงลำดับและเปรียบเทียบข้อมูล ดูหน้านี้สำหรับข้อมูลเพิ่มเติม
คุณยังสามารถแปลงแอททริบิวต์นั้นให้ตรงตามตัวพิมพ์เล็กและใหญ่โดยใช้ไวยากรณ์นี้:
ALTER TABLE Table1
ALTER COLUMN Column1 VARCHAR(200)
COLLATE SQL_Latin1_General_CP1_CS_AS
ตอนนี้การค้นหาของคุณจะต้องตรงตามตัวพิมพ์ใหญ่ - เล็ก
หากคุณต้องการทำให้ตัวพิมพ์เล็กและตัวพิมพ์เล็กเสียใหม่ให้ใช้
ALTER TABLE Table1
ALTER COLUMN Column1 VARCHAR(200)
COLLATE SQL_Latin1_General_CP1_CI_AS
คุณสามารถแปลงคอลัมน์เป็น VARBINARY ได้อย่างง่ายดาย (ความยาวสูงสุด) ความยาวจะต้องเป็นค่าสูงสุดที่คุณคาดหวังเพื่อหลีกเลี่ยงการเปรียบเทียบที่บกพร่องมันเพียงพอที่จะตั้งความยาวเป็นความยาวคอลัมน์ คอลัมน์ Trim ช่วยให้คุณเปรียบเทียบมูลค่าจริงยกเว้นช่องว่างมีความหมายและคุณค่าในคอลัมน์ตารางของคุณนี่เป็นตัวอย่างง่ายๆและอย่างที่คุณเห็น I Trim ค่าคอลัมน์แล้วแปลงและเปรียบเทียบ:
CONVERT(VARBINARY(250),LTRIM(RTRIM(Column1))) = CONVERT(VARBINARY(250),LTRIM(RTRIM(Column2)))
หวังว่าความช่วยเหลือนี้
เช่นเดียวกับทางเลือกอื่นที่คุณสามารถใช้ HASHBYTES ได้ดังนี้:
SELECT *
FROM a_table
WHERE HASHBYTES('sha1', attribute) = HASHBYTES('sha1', 'k')
คุณสามารถกำหนดattribute
เป็นBINARY
หรือใช้INSTR
หรือSTRCMP
ทำการค้นหาของคุณ
INSTR
และSTRCMP
ฟังก์ชั่นเหล่านี้