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