Se hai una colonna in una tabella di database che contiene dati di caratteri, ma alcune righe contengono anche numeri, puoi utilizzare le seguenti query SQL per restituire solo quelle righe che non contengono numeri all'interno del valore.
A rigor di termini, i numeri possono essere rappresentati da cifre numeriche, parole e altri simboli, ma ai fini di questo articolo, "numero" significa "cifra numerica". Quindi stiamo trovando valori che non contengono cifre numeriche.
La query che utilizzi dipenderà dal tuo DBMS.
SQL Server
In SQL Server, possiamo utilizzare una query come questa:
SELECT ProductName
FROM Products
WHERE ProductName NOT LIKE '%[0-9]%';
Qui, stiamo restituendo tutte le righe in cui ProductName
la colonna non contiene cifre numeriche.
Oracolo
In Oracle, possiamo usare REGEXP_LIKE()
funzione:
SELECT ProductName
FROM Products
WHERE NOT REGEXP_LIKE(ProductName, '[0-9]+');
In questo caso forniamo un modello di espressione regolare che corrisponde ai valori che non vogliamo vengano restituiti. I valori sono infatti abbinati, ma neghiamo anche la corrispondenza usando NOT
, il che significa che viene restituito tutto ciò che non corrisponde.
Un altro modo per farlo è usare il [:digit:]
Classe di caratteri POSIX:
SELECT ProductName
FROM Products
WHERE NOT REGEXP_LIKE(ProductName, '[[:digit:]]');
MySQL
In MySQL, possiamo usare NOT REGEX
funzione:
SELECT ProductName
FROM Products
WHERE ProductName NOT REGEXP '[0-9]+';
Un altro modo per scriverlo è questo:
SELECT ProductName
FROM Products
WHERE NOT (ProductName REGEXP '[0-9]+');
Oppure possiamo usare il [:digit:]
Classe di caratteri POSIX:
SELECT ProductName
FROM Products
WHERE NOT (ProductName REGEXP '[[:digit:]]');
MariaDB
In MariaDB, possiamo usare la sua implementazione di NOT REGEX
funzione:
SELECT ProductName
FROM Products
WHERE ProductName NOT REGEXP '[0-9]+';
Un altro modo per scriverlo è questo:
SELECT ProductName
FROM Products
WHERE NOT (ProductName REGEXP '[0-9]+');
Oppure possiamo usare il [:digit:]
Classe di caratteri POSIX:
SELECT ProductName
FROM Products
WHERE NOT (ProductName REGEXP '[[:digit:]]');
PostgreSQL
Ecco come possiamo farlo in Postgres:
SELECT ProductName
FROM Products
WHERE ProductName !~ '[0-9]+';
SQLite
In SQLite, possiamo farlo:
SELECT ProductName
FROM Products
WHERE ProductName NOT REGEXP '[0-9]+';
In SQLite, il REGEXP
è una sintassi speciale per REGEXP()
funzione utente, quindi possiamo anche fare quanto segue:
SELECT ProductName
FROM Products
WHERE NOT REGEXP('[0-9]+', ProductName);