Jeśli masz kolumnę w tabeli bazy danych, która zawiera dane znakowe, ale niektóre wiersze zawierają również liczby, możesz użyć następujących zapytań SQL, aby zwrócić tylko te wiersze, które nie zawierają liczb w wartości.
Ściśle mówiąc, liczby mogą być reprezentowane przez cyfry, słowa i inne symbole, ale na potrzeby tego artykułu „liczba” oznacza „cyfrę”. Więc znajdujemy wartości, które nie zawierają żadnych cyfr.
Zapytanie, którego użyjesz, będzie zależeć od Twojego DBMS.
Serwer SQL
W SQL Server możemy użyć takiego zapytania:
SELECT ProductName
FROM Products
WHERE ProductName NOT LIKE '%[0-9]%';
Tutaj zwracamy wszystkie wiersze, w których ProductName
kolumna nie zawiera żadnych cyfr.
Wyrocznia
W Oracle możemy użyć REGEXP_LIKE()
funkcja:
SELECT ProductName
FROM Products
WHERE NOT REGEXP_LIKE(ProductName, '[0-9]+');
W tym przypadku dostarczamy wzorzec wyrażenia regularnego, który pasuje do wartości, których nie chcemy zwracać. Wartości są w rzeczywistości dopasowane, ale negujemy również dopasowanie, używając NOT
, co oznacza, że zwracane jest wszystko, co nie pasuje.
Innym sposobem na to jest użycie [:digit:]
Klasa znaków POSIX:
SELECT ProductName
FROM Products
WHERE NOT REGEXP_LIKE(ProductName, '[[:digit:]]');
MySQL
W MySQL możemy użyć NOT REGEX
funkcja:
SELECT ProductName
FROM Products
WHERE ProductName NOT REGEXP '[0-9]+';
Inny sposób napisania tego jest taki:
SELECT ProductName
FROM Products
WHERE NOT (ProductName REGEXP '[0-9]+');
Lub możemy użyć [:digit:]
Klasa znaków POSIX:
SELECT ProductName
FROM Products
WHERE NOT (ProductName REGEXP '[[:digit:]]');
MariaDB
W MariaDB możemy użyć jej implementacji NOT REGEX
funkcja:
SELECT ProductName
FROM Products
WHERE ProductName NOT REGEXP '[0-9]+';
Inny sposób napisania tego jest taki:
SELECT ProductName
FROM Products
WHERE NOT (ProductName REGEXP '[0-9]+');
Lub możemy użyć [:digit:]
Klasa znaków POSIX:
SELECT ProductName
FROM Products
WHERE NOT (ProductName REGEXP '[[:digit:]]');
PostgreSQL
Oto jak możemy to zrobić w Postgresie:
SELECT ProductName
FROM Products
WHERE ProductName !~ '[0-9]+';
SQLite
W SQLite możemy to zrobić:
SELECT ProductName
FROM Products
WHERE ProductName NOT REGEXP '[0-9]+';
W SQLite REGEXP
operator jest specjalną składnią dla REGEXP()
funkcję użytkownika, więc możemy również wykonać następujące czynności:
SELECT ProductName
FROM Products
WHERE NOT REGEXP('[0-9]+', ProductName);