Als u een kolom in een databasetabel hebt die tekengegevens bevat, maar sommige rijen ook getallen bevatten, kunt u de volgende SQL-query's gebruiken om alleen die rijen te retourneren die geen getallen in de waarde bevatten.
Strikt genomen kunnen getallen worden weergegeven door numerieke cijfers, woorden en andere symbolen, maar voor de toepassing van dit artikel betekent "getal" "numeriek cijfer". We vinden dus waarden die geen numerieke cijfers bevatten.
De query die u gebruikt, is afhankelijk van uw DBMS.
SQL-server
In SQL Server kunnen we een query als deze gebruiken:
SELECT ProductName
FROM Products
WHERE ProductName NOT LIKE '%[0-9]%';
Hier retourneren we alle rijen waar de ProductName
kolom bevat geen numerieke cijfers.
Oracle
In Oracle kunnen we de REGEXP_LIKE()
. gebruiken functie:
SELECT ProductName
FROM Products
WHERE NOT REGEXP_LIKE(ProductName, '[0-9]+');
In dit geval bieden we een patroon voor reguliere expressies dat overeenkomt met de waarden die we niet willen retourneren. De waarden komen in feite overeen, maar we ontkrachten de overeenkomst ook door NOT
te gebruiken , wat betekent dat alles wat niet overeenkomt wordt geretourneerd.
Een andere manier om dit te doen is door de [:digit:]
. te gebruiken POSIX-tekenklasse:
SELECT ProductName
FROM Products
WHERE NOT REGEXP_LIKE(ProductName, '[[:digit:]]');
MySQL
In MySQL kunnen we de NOT REGEX
. gebruiken functie:
SELECT ProductName
FROM Products
WHERE ProductName NOT REGEXP '[0-9]+';
Een andere manier om het te schrijven is als volgt:
SELECT ProductName
FROM Products
WHERE NOT (ProductName REGEXP '[0-9]+');
Of we kunnen de [:digit:]
. gebruiken POSIX-tekenklasse:
SELECT ProductName
FROM Products
WHERE NOT (ProductName REGEXP '[[:digit:]]');
MariaDB
In MariaDB kunnen we de implementatie van de NOT REGEX
gebruiken functie:
SELECT ProductName
FROM Products
WHERE ProductName NOT REGEXP '[0-9]+';
Een andere manier om het te schrijven is als volgt:
SELECT ProductName
FROM Products
WHERE NOT (ProductName REGEXP '[0-9]+');
Of we kunnen de [:digit:]
. gebruiken POSIX-tekenklasse:
SELECT ProductName
FROM Products
WHERE NOT (ProductName REGEXP '[[:digit:]]');
PostgreSQL
Hier is hoe we het kunnen doen in Postgres:
SELECT ProductName
FROM Products
WHERE ProductName !~ '[0-9]+';
SQLite
In SQLite kunnen we dit doen:
SELECT ProductName
FROM Products
WHERE ProductName NOT REGEXP '[0-9]+';
In SQLite, de REGEXP
operator is een speciale syntaxis voor de REGEXP()
gebruikersfunctie, dus we kunnen ook het volgende doen:
SELECT ProductName
FROM Products
WHERE NOT REGEXP('[0-9]+', ProductName);