Om du har en kolumn i en databastabell som innehåller teckendata, men vissa rader också innehåller siffror, kan du använda följande SQL-frågor för att returnera bara de rader som inte innehåller siffror inom värdet.
Strängt taget kan siffror representeras av numeriska siffror, ord och andra symboler, men för denna artikels syfte betyder "nummer" "numerisk siffra". Så vi hittar värden som inte innehåller några numeriska siffror.
Frågan du använder beror på ditt DBMS.
SQL-server
I SQL Server kan vi använda en fråga som denna:
SELECT ProductName
FROM Products
WHERE ProductName NOT LIKE '%[0-9]%';
Här returnerar vi alla rader där ProductName
kolumnen innehåller inga numeriska siffror.
Oracle
I Oracle kan vi använda REGEXP_LIKE()
funktion:
SELECT ProductName
FROM Products
WHERE NOT REGEXP_LIKE(ProductName, '[0-9]+');
I det här fallet tillhandahåller vi ett reguljärt uttrycksmönster som matchar de värden som vi inte vill ska returneras. Värdena är i själva verket matchade, men vi förnekar också matchningen genom att använda NOT
, vilket innebär att allt som inte stämmer returneras.
Ett annat sätt att göra det är att använda [:digit:]
POSIX teckenklass:
SELECT ProductName
FROM Products
WHERE NOT REGEXP_LIKE(ProductName, '[[:digit:]]');
MySQL
I MySQL kan vi använda NOT REGEX
funktion:
SELECT ProductName
FROM Products
WHERE ProductName NOT REGEXP '[0-9]+';
Ett annat sätt att skriva det är så här:
SELECT ProductName
FROM Products
WHERE NOT (ProductName REGEXP '[0-9]+');
Eller så kan vi använda [:digit:]
POSIX teckenklass:
SELECT ProductName
FROM Products
WHERE NOT (ProductName REGEXP '[[:digit:]]');
MariaDB
I MariaDB kan vi använda dess implementering av NOT REGEX
funktion:
SELECT ProductName
FROM Products
WHERE ProductName NOT REGEXP '[0-9]+';
Ett annat sätt att skriva det är så här:
SELECT ProductName
FROM Products
WHERE NOT (ProductName REGEXP '[0-9]+');
Eller så kan vi använda [:digit:]
POSIX teckenklass:
SELECT ProductName
FROM Products
WHERE NOT (ProductName REGEXP '[[:digit:]]');
PostgreSQL
Så här kan vi göra det i Postgres:
SELECT ProductName
FROM Products
WHERE ProductName !~ '[0-9]+';
SQLite
I SQLite kan vi göra detta:
SELECT ProductName
FROM Products
WHERE ProductName NOT REGEXP '[0-9]+';
I SQLite, REGEXP
operatorn är en speciell syntax för REGEXP()
användarfunktion, så vi kan också göra följande:
SELECT ProductName
FROM Products
WHERE NOT REGEXP('[0-9]+', ProductName);