sql >> Base de Datos >  >> NoSQL >> MongoDB

Encuentra valores que no contienen números en SQL

Si tiene una columna en una tabla de base de datos que contiene datos de caracteres, pero algunas filas también contienen números, puede usar las siguientes consultas SQL para devolver solo aquellas filas que no contienen números dentro del valor.

Estrictamente hablando, los números pueden representarse mediante dígitos numéricos, palabras y otros símbolos, pero para los fines de este artículo, "número" significa "dígito numérico". Así que estamos encontrando valores que no contienen dígitos numéricos.

La consulta que utilice dependerá de su DBMS.

Servidor SQL

En SQL Server, podemos usar una consulta como esta:

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

Aquí, devolvemos todas las filas donde ProductName columna no contiene ningún dígito numérico.

Oráculo

En Oracle, podemos usar REGEXP_LIKE() función:

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

En este caso, proporcionamos un patrón de expresión regular que coincide con los valores que no queremos que se devuelvan. De hecho, los valores coinciden, pero también negamos la coincidencia usando NOT , lo que significa que se devuelve todo lo que no coincide.

Otra forma de hacerlo es usar el [:digit:] clase de carácter POSIX:

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

MySQL

En MySQL, podemos usar NOT REGEX función:

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

Otra forma de escribirlo es así:

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

O podemos usar el [:digit:] clase de carácter POSIX:

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

MariaDB

En MariaDB, podemos usar su implementación de NOT REGEX función:

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

Otra forma de escribirlo es así:

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

O podemos usar el [:digit:] clase de carácter POSIX:

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

PostgreSQL

Así es como podemos hacerlo en Postgres:

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

SQLite

En SQLite, podemos hacer esto:

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

En SQLite, REGEXP operador es una sintaxis especial para REGEXP() función de usuario, por lo que también podemos hacer lo siguiente:

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