Hvis du har en kolonne i en databasetabel, der indeholder tegndata, men nogle rækker også indeholder tal, kan du bruge følgende SQL-forespørgsler til kun at returnere de rækker, der ikke indeholder tal i værdien.
Strengt taget kan tal repræsenteres af numeriske cifre, ord og andre symboler, men i denne artikels formål betyder "tal" "numerisk ciffer". Så vi finder værdier, der ikke indeholder nogen numeriske cifre.
Den forespørgsel, du bruger, afhænger af dit DBMS.
SQL-server
I SQL Server kan vi bruge en forespørgsel som denne:
SELECT ProductName
FROM Products
WHERE ProductName NOT LIKE '%[0-9]%';
Her returnerer vi alle rækker, hvor ProductName
kolonne indeholder ingen numeriske cifre.
Oracle
I Oracle kan vi bruge REGEXP_LIKE()
funktion:
SELECT ProductName
FROM Products
WHERE NOT REGEXP_LIKE(ProductName, '[0-9]+');
I dette tilfælde giver vi et regulært udtryksmønster, der matcher de værdier, som vi ikke ønsker skal returneres. Værdierne er faktisk matchede, men vi negerer også matchningen ved at bruge NOT
, hvilket betyder, at alt, der ikke matcher, returneres.
En anden måde at gøre det på er at bruge [:digit:]
POSIX-tegnklasse:
SELECT ProductName
FROM Products
WHERE NOT REGEXP_LIKE(ProductName, '[[:digit:]]');
MySQL
I MySQL kan vi bruge NOT REGEX
funktion:
SELECT ProductName
FROM Products
WHERE ProductName NOT REGEXP '[0-9]+';
En anden måde at skrive det på er sådan her:
SELECT ProductName
FROM Products
WHERE NOT (ProductName REGEXP '[0-9]+');
Eller vi kan bruge [:digit:]
POSIX-tegnklasse:
SELECT ProductName
FROM Products
WHERE NOT (ProductName REGEXP '[[:digit:]]');
MariaDB
I MariaDB kan vi bruge dens implementering af NOT REGEX
funktion:
SELECT ProductName
FROM Products
WHERE ProductName NOT REGEXP '[0-9]+';
En anden måde at skrive det på er sådan her:
SELECT ProductName
FROM Products
WHERE NOT (ProductName REGEXP '[0-9]+');
Eller vi kan bruge [:digit:]
POSIX-tegnklasse:
SELECT ProductName
FROM Products
WHERE NOT (ProductName REGEXP '[[:digit:]]');
PostgreSQL
Sådan kan vi gøre det i Postgres:
SELECT ProductName
FROM Products
WHERE ProductName !~ '[0-9]+';
SQLite
I SQLite kan vi gøre dette:
SELECT ProductName
FROM Products
WHERE ProductName NOT REGEXP '[0-9]+';
I SQLite er REGEXP
operator er en speciel syntaks for REGEXP()
brugerfunktion, så vi kan også gøre følgende:
SELECT ProductName
FROM Products
WHERE NOT REGEXP('[0-9]+', ProductName);