MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Trouver des valeurs qui ne contiennent pas de nombres en SQL

Si vous avez une colonne dans une table de base de données qui contient des données de caractères, mais que certaines lignes contiennent également des nombres, vous pouvez utiliser les requêtes SQL suivantes pour renvoyer uniquement les lignes qui ne contiennent pas de nombres dans la valeur.

Strictement parlant, les nombres peuvent être représentés par des chiffres numériques, des mots et d'autres symboles, mais pour les besoins de cet article, "nombre" signifie "chiffre numérique". Nous trouvons donc des valeurs qui ne contiennent aucun chiffre numérique.

La requête que vous utiliserez dépendra de votre SGBD.

SQL Server

Dans SQL Server, nous pouvons utiliser une requête comme celle-ci :

SELECT ProductName 
FROM Products
WHERE ProductName NOT LIKE '%[0-9]%';

Ici, nous renvoyons toutes les lignes où le ProductName la colonne ne contient aucun chiffre numérique.

Oracle

Dans Oracle, nous pouvons utiliser le REGEXP_LIKE() fonction :

SELECT ProductName
FROM Products 
WHERE NOT REGEXP_LIKE(ProductName, '[0-9]+');

Dans ce cas, nous fournissons un modèle d'expression régulière qui correspond aux valeurs que nous ne voulons pas renvoyer. Les valeurs correspondent en fait, mais nous annulons également la correspondance en utilisant NOT , ce qui signifie que tout ce qui ne correspond pas est renvoyé.

Une autre façon de le faire est d'utiliser le [:digit:] Classe de caractères POSIX :

SELECT ProductName
FROM Products 
WHERE NOT REGEXP_LIKE(ProductName, '[[:digit:]]');

MySQL

Dans MySQL, nous pouvons utiliser le NOT REGEX fonction :

SELECT ProductName 
FROM Products
WHERE ProductName NOT REGEXP '[0-9]+';

Une autre façon de l'écrire est la suivante :

SELECT ProductName 
FROM Products
WHERE NOT (ProductName REGEXP '[0-9]+');

Ou nous pouvons utiliser le [:digit:] Classe de caractères POSIX :

SELECT ProductName 
FROM Products
WHERE NOT (ProductName REGEXP '[[:digit:]]');

MariaDB

Dans MariaDB, nous pouvons utiliser son implémentation du NOT REGEX fonction :

SELECT ProductName 
FROM Products
WHERE ProductName NOT REGEXP '[0-9]+';

Une autre façon de l'écrire est la suivante :

SELECT ProductName 
FROM Products
WHERE NOT (ProductName REGEXP '[0-9]+');

Ou nous pouvons utiliser le [:digit:] Classe de caractères POSIX :

SELECT ProductName 
FROM Products
WHERE NOT (ProductName REGEXP '[[:digit:]]');

PostgreSQL

Voici comment nous pouvons le faire dans Postgres :

SELECT ProductName 
FROM Products
WHERE ProductName !~ '[0-9]+';

SQLite

Dans SQLite, nous pouvons faire ceci :

SELECT ProductName 
FROM Products
WHERE ProductName NOT REGEXP '[0-9]+';

Dans SQLite, le REGEXP L'opérateur est une syntaxe spéciale pour le REGEXP() fonction utilisateur, nous pouvons donc également effectuer les opérations suivantes :

SELECT ProductName 
FROM Products
WHERE NOT REGEXP('[0-9]+', ProductName);