Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

วิธีค้นหาข้อมูลที่มี Hyphen (-) เพียงสองตัวใน MySQL

ใช้ LIKE และ NOT LIKE กรองรูปแบบ Hyphen แบบแม่นยำ

รวมเงื่อนไข LIKE '%--%' (มี -- อย่างน้อย 1 คู่) และ NOT LIKE '%---%' (ไม่มี --- 3 ตัวติดกัน) เพื่อกรองเฉพาะที่มี Hyphen 2 ตัวติดกันพอดี

ตัวอย่างสร้างตารางและข้อมูล

CREATE TABLE DemoTable (
    Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Password VARCHAR(100)
);

INSERT INTO DemoTable (Password) VALUES
('John@--123'), ('---Carol234'), ('--David987'), ('Mike----53443');

ข้อมูลในตาราง

+----+---------------+
| Id | Password      |
+----+---------------+
| 1  | John@--123    |
| 2  | ---Carol234   |
| 3  | --David987    |
| 4  | Mike----53443 |
+----+---------------+

คำสั่งค้นหาที่มี -- แต่มิได้ ---

SELECT * FROM DemoTable 
WHERE Password LIKE '%--%' AND Password NOT LIKE '%---%';

ผลลัพธ์

+----+------------+
| Id | Password   |
+----+------------+
| 1  | John@--123 |
| 3  | --David987 |
+----+------------+

คำอธิบาย:

  • LIKE '%--%' ตรงกับ -- อยู่ที่ไหนก็ได้ (Id 1, 2, 3, 4)
  • NOT LIKE '%---%' ตัดออกที่มี --- ติดกัน 3 ตัว (Id 2, 4)
  • เหลือ Id 1 (มี -- 1 คู่) และ Id 3 (มี -- 1 คู่)

⚠ ข้อจำกัด: วิธีนี้กรองได้เฉพาะ "ไม่มี 3 ตัวติดกัน" แต่ไม่ตรวจสอบ "มีทั้งหมด 2 ตัวพอดี" (เช่น '--a--b--' มี 3 คู่ ก็จะผ่าน)

วิธีแม่นยำกว่า (MySQL 8.0+): ใช้ REGEXP

WHERE Password REGEXP '--' AND Password NOT REGEXP '---'

หรือนับจำนวน Hyphen ด้วย CHAR_LENGTH(Password) - CHAR_LENGTH(REPLACE(Password, '-', '')) = 2