SQL: วิธีดำเนินการสตริงไม่เท่ากัน


114

ฉันมีคำถามต่อไปนี้

SELECT * FROM table
WHERE tester <> 'username';

ฉันคาดหวังว่าสิ่งนี้จะส่งคืนผลลัพธ์ทั้งหมดโดยที่ผู้ทดสอบไม่ใช่สตริงusernameแต่ไม่ได้ผล ฉันคิดว่าฉันกำลังมองหาค่าผกผันของตัวLikeดำเนินการ แต่ฉันไม่แน่ใจ? ในการค้นหาของฉันฉันพบคำตอบสำหรับตัวเลข (นั่นคือสิ่งที่ฉันได้รับ <> จาก) แต่ดูเหมือนว่าจะใช้ไม่ได้กับสตริง


5
ค่าที่คุณมีปัญหากับNULLค่านิยมหรือไม่? ( NULL <> 'username' => NULL=> เท็จ)?
Wrikken

คำตอบ:


174

whereประโยคของคุณจะส่งคืนแถวทั้งหมดที่testerไม่ตรงกันusernameและโดยที่testerไม่เป็นโมฆะ

หากคุณต้องการรวม NULL ให้ลอง:

where tester <> 'username' or tester is null

หากคุณกำลังมองหาสตริงที่ไม่มีคำว่า "ชื่อผู้ใช้" เป็นสตริงย่อยคุณlikeสามารถใช้:

where tester not like '%username%'


20

เงื่อนไข NULL-safe จะมีลักษณะดังนี้:

select * from table
where NOT (tester <=> 'username')

ใช่นี่เป็นสิ่งเดียวที่เหมาะกับฉันเพราะฉันมีโซ่และของ ไม่รู้จักตัวดำเนินการ <=> ขอบคุณ!
varta

เพิ่งสังเกตว่าตัว<=>ดำเนินการมีอยู่ในMySQLโลกเท่านั้นสำหรับข้อมูลเพิ่มเติมโปรดดูที่ <=>
Top-Master


7

strcompฟังก์ชั่นอาจจะเหมาะสมที่นี่ (ผลตอบแทน 0 เมื่อสตริงเหมือนกัน):

 SELECT * from table WHERE Strcmp(user, testername) <> 0;

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.