MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Trova valori che non contengono numeri in SQL

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);