Se você tiver uma coluna em uma tabela de banco de dados que contém dados de caracteres, mas algumas linhas também contêm números, você pode usar as seguintes consultas SQL para retornar apenas as linhas que não contêm números dentro do valor.
Estritamente falando, os números podem ser representados por dígitos numéricos, palavras e outros símbolos, mas para os fins deste artigo, “número” significa “dígito numérico”. Portanto, estamos encontrando valores que não contêm dígitos numéricos.
A consulta que você usa dependerá do seu DBMS.
SQL Server
No SQL Server, podemos usar uma consulta como esta:
SELECT ProductName
FROM Products
WHERE ProductName NOT LIKE '%[0-9]%';
Aqui, estamos retornando todas as linhas em que o
ProductName
coluna não contém nenhum dígito numérico. Oráculo
No Oracle, podemos usar o
REGEXP_LIKE()
função:SELECT ProductName
FROM Products
WHERE NOT REGEXP_LIKE(ProductName, '[0-9]+');
Nesse caso, fornecemos um padrão de expressão regular que corresponde aos valores que não queremos que sejam retornados. Os valores são de fato correspondentes, mas também negamos a correspondência usando
NOT
, o que significa que tudo o que não corresponder é retornado. Outra maneira de fazer isso é usar o
[:digit:]
Classe de caracteres POSIX:SELECT ProductName
FROM Products
WHERE NOT REGEXP_LIKE(ProductName, '[[:digit:]]');
MySQL
No MySQL, podemos usar o
NOT REGEX
função:SELECT ProductName
FROM Products
WHERE ProductName NOT REGEXP '[0-9]+';
Outra maneira de escrever é assim:
SELECT ProductName
FROM Products
WHERE NOT (ProductName REGEXP '[0-9]+');
Ou podemos usar o
[:digit:]
Classe de caracteres POSIX:SELECT ProductName
FROM Products
WHERE NOT (ProductName REGEXP '[[:digit:]]');
MariaDB
No MariaDB, podemos usar sua implementação do
NOT REGEX
função:SELECT ProductName
FROM Products
WHERE ProductName NOT REGEXP '[0-9]+';
Outra maneira de escrever é assim:
SELECT ProductName
FROM Products
WHERE NOT (ProductName REGEXP '[0-9]+');
Ou podemos usar o
[:digit:]
Classe de caracteres POSIX:SELECT ProductName
FROM Products
WHERE NOT (ProductName REGEXP '[[:digit:]]');
PostgreSQL
Veja como podemos fazer isso no Postgres:
SELECT ProductName
FROM Products
WHERE ProductName !~ '[0-9]+';
SQLite
No SQLite, podemos fazer isso:
SELECT ProductName
FROM Products
WHERE ProductName NOT REGEXP '[0-9]+';
No SQLite, o
REGEXP
operador é uma sintaxe especial para o REGEXP()
função do usuário, então também podemos fazer o seguinte:SELECT ProductName
FROM Products
WHERE NOT REGEXP('[0-9]+', ProductName);