Nếu bạn có một cột trong bảng cơ sở dữ liệu chứa dữ liệu ký tự, nhưng một số hàng cũng chứa số, bạn có thể sử dụng các truy vấn SQL sau để chỉ trả về những hàng không chứa số trong giá trị.
Nói một cách chính xác, các con số có thể được biểu thị bằng các chữ số, từ và các ký hiệu khác, nhưng với mục đích của bài viết này, “number” có nghĩa là “chữ số”. Vì vậy, chúng tôi đang tìm các giá trị không chứa bất kỳ chữ số nào.
Truy vấn bạn sử dụng sẽ phụ thuộc vào DBMS của bạn.
Máy chủ SQL
Trong SQL Server, chúng ta có thể sử dụng một truy vấn như sau:
SELECT ProductName
FROM Products
WHERE ProductName NOT LIKE '%[0-9]%';
Tại đây, chúng tôi trả về tất cả các hàng có ProductName
cột không chứa bất kỳ chữ số nào.
Oracle
Trong Oracle, chúng ta có thể sử dụng REGEXP_LIKE()
chức năng:
SELECT ProductName
FROM Products
WHERE NOT REGEXP_LIKE(ProductName, '[0-9]+');
Trong trường hợp này, chúng tôi cung cấp mẫu biểu thức chính quy khớp với các giá trị mà chúng tôi không muốn được trả lại. Trên thực tế, các giá trị được khớp, nhưng chúng tôi cũng phủ định kết quả khớp bằng cách sử dụng NOT
, có nghĩa là mọi thứ không khớp sẽ được trả lại.
Một cách khác để làm điều đó là sử dụng [:digit:]
Lớp ký tự POSIX:
SELECT ProductName
FROM Products
WHERE NOT REGEXP_LIKE(ProductName, '[[:digit:]]');
MySQL
Trong MySQL, chúng ta có thể sử dụng NOT REGEX
chức năng:
SELECT ProductName
FROM Products
WHERE ProductName NOT REGEXP '[0-9]+';
Một cách khác để viết nó như thế này:
SELECT ProductName
FROM Products
WHERE NOT (ProductName REGEXP '[0-9]+');
Hoặc chúng ta có thể sử dụng [:digit:]
Lớp ký tự POSIX:
SELECT ProductName
FROM Products
WHERE NOT (ProductName REGEXP '[[:digit:]]');
MariaDB
Trong MariaDB, chúng ta có thể sử dụng cách triển khai NOT REGEX
của nó chức năng:
SELECT ProductName
FROM Products
WHERE ProductName NOT REGEXP '[0-9]+';
Một cách khác để viết nó như thế này:
SELECT ProductName
FROM Products
WHERE NOT (ProductName REGEXP '[0-9]+');
Hoặc chúng ta có thể sử dụng [:digit:]
Lớp ký tự POSIX:
SELECT ProductName
FROM Products
WHERE NOT (ProductName REGEXP '[[:digit:]]');
PostgreSQL
Đây là cách chúng tôi có thể làm điều đó trong Postgres:
SELECT ProductName
FROM Products
WHERE ProductName !~ '[0-9]+';
SQLite
Trong SQLite, chúng ta có thể làm điều này:
SELECT ProductName
FROM Products
WHERE ProductName NOT REGEXP '[0-9]+';
Trong SQLite, REGEXP
toán tử là một cú pháp đặc biệt cho REGEXP()
chức năng người dùng, vì vậy chúng tôi cũng có thể làm như sau:
SELECT ProductName
FROM Products
WHERE NOT REGEXP('[0-9]+', ProductName);