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