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

Find værdier, der ikke indeholder tal i SQL

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

  1. MongoDB estimatedDocumentCount()

  2. JavaScript NoSQL-injektionsforebyggelse i MongoDB

  3. Sådan får du DIFF på sorteret sæt

  4. Node.js, Socket.io, Redis pub/sub høj lydstyrke, lav latency vanskeligheder