Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Truy xuất MySQL chỉ khi chứa đúng 2 dấu gạch ngang?

Giải pháp: LIKE kết hợp NOT LIKE

Kiểm tra có chứa '--' nhưng không chứa '---'.

Ví dụ minh họa

Tạo bảng mật khẩu

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

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

Dữ liệu gốc

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

Truy vấn: Chứa đúng 2 dấu '-' liên tiếp

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

Kết quả

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

Giải thích

  • LIKE '%--%': Có chuỗi '--' bất kỳ vị trí
  • NOT LIKE '%---%': Loại trừ có '---' (3 dấu trở lên)
  • Kết hợp: Chỉ giữ lại có đúng 2 dấu liên tiếp

Cách chính xác hơn: REGEXP

-- Chứa -- nhưng không phải một phần của ---
WHERE Password REGEXP '(^|[^-])--([^-]|$)'

-- Hoặc negative lookahead (MySQL 8.0+ không hỗ trợ lookahead)
-- Workaround:
WHERE Password REGEXP '--' AND Password NOT REGEXP '---'

Đếm số dấu gạch ngang

SELECT Password,
       (CHAR_LENGTH(Password) - CHAR_LENGTH(REPLACE(Password, '-', ''))) AS dash_count
FROM DemoTable;

Kết quả

+---------------+------------+
| Password      | dash_count |
+---------------+------------+
| John@--123    | 2          |
| ---Carol234   | 3          |
| --David987    | 2          |
| Mike----53443 | 6          |
+---------------+------------+

Ứng dụng: Validate format

-- Format: XX-XX-XX (2-2-2)
WHERE Password REGEXP '^[^-]*-[^-]*-[^-]*$'
  AND Password NOT LIKE '%--%';