sql >> Databasteknik >  >> NoSQL >> MongoDB

Hitta värden som inte innehåller siffror i SQL

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

  1. Snabbaste sättet att ta bort dubbletter av dokument i mongodb

  2. Är master alltid omdisponerad instans med minsta prioritet?

  3. Mungos befolkar kapslad array

  4. Hur man väljer det bästa MongoDB-hotellet för ditt företag