อีกทางเลือกหนึ่งคือการดูเฉพาะที่ CHAR_LENGTH
ค่าคอลัมน์ (เพื่อไม่ให้สับสนกับLENGTH
)
โดยใช้เกณฑ์ที่มีความยาวตัวอักษรมากกว่า 0 จะหลีกเลี่ยงการบวกเท็จเมื่อค่าของคอลัมน์สามารถ falsey เช่นในกรณีของคอลัมน์จำนวนเต็มมีค่าของหรือ0
NULL
ทำหน้าที่อย่างสม่ำเสมอมากขึ้นในประเภทข้อมูลที่แตกต่างกัน
ซึ่งส่งผลให้ค่าใด ๆ ที่มีความยาวอย่างน้อย 1 ตัวอักษรหรืออย่างอื่นไม่ว่างเปล่า
SELECT phone, phone2
FROM users
WHERE phone LIKE '813%'
AND CHAR_LENGTH(phone2) > 0
ข้อมูลตาราง
users
phone (varchar 12) | phone2 (int 10)
"813-123-4567" | NULL
"813-123-4567" | 1
"813-123-4567" | 0
users2
phone (varchar 12) | phone2 (varchar 12)
"813-123-4567" | NULL
"813-123-4567" | "1"
"813-123-4567" | "0"
"813-123-4567" | ""
CHAR_LENGTH(phone2) > 0
ผลลัพธ์ (เหมือนกัน)
users
813-123-4567 | 1
813-123-4567 | 0
users2
813-123-4567 | 1
813-123-4567 | 0
ทางเลือก
phone2 <> ''
ผลลัพธ์ (ต่างกัน)
users
813-123-4567 | 1
users2
813-123-4567 | 1
813-123-4567 | 0
phone2 > ''
ผลลัพธ์ (ต่างกัน)
users
813-123-4567 | 1
users2
813-123-4567 | 1
813-123-4567 | 0
COALESCE(phone2, '') <> ''
ผลลัพธ์ (เดียวกัน)
หมายเหตุ: ผลลัพธ์phone2 IS NOT NULL AND phone2 <> ''
ไม่ตรงกับที่คาดไว้
users
813-123-4567 | 1
813-123-4567 | 0
users2
813-123-4567 | 1
813-123-4567 | 0
phone2 IS NOT NULL AND phone2 <> ''
ผลลัพธ์ (ต่างกัน)
users
813-123-4567 | 1
users2
813-123-4567 | 1
813-123-4567 | 0
phone2
มีบางอย่างในมันได้หรือไม่" ผู้คนต่างคาดเดากันว่าคุณหมายถึงphone2
IS NOT NULL, ไม่ว่างเปล่า, ไม่ใช่ช่องว่างพิเศษ ฯลฯ