Pokud máte v databázové tabulce sloupec, který obsahuje znaková data, ale některé řádky obsahují také čísla, můžete pomocí následujících dotazů SQL vrátit pouze ty řádky, které v hodnotě neobsahují čísla.
Přísně vzato, čísla mohou být reprezentována číselnými číslicemi, slovy a jinými symboly, ale pro účely tohoto článku „číslo“ znamená „číselná číslice“. Takže nacházíme hodnoty, které neobsahují žádné číselné číslice.
Dotaz, který použijete, bude záviset na vašem DBMS.
SQL Server
V SQL Server můžeme použít dotaz takto:
SELECT ProductName
FROM Products
WHERE ProductName NOT LIKE '%[0-9]%';
Zde vracíme všechny řádky, kde je ProductName
sloupec neobsahuje žádné číslice.
Oracle
V Oracle můžeme použít REGEXP_LIKE()
funkce:
SELECT ProductName
FROM Products
WHERE NOT REGEXP_LIKE(ProductName, '[0-9]+');
V tomto případě poskytujeme vzor regulárního výrazu, který odpovídá hodnotám, které nechceme vracet. Hodnoty jsou ve skutečnosti shodné, ale shodu také negujeme pomocí NOT
, což znamená, že se vrátí vše, co se neshoduje.
Dalším způsobem, jak to udělat, je použít [:digit:]
Třída znaků POSIX:
SELECT ProductName
FROM Products
WHERE NOT REGEXP_LIKE(ProductName, '[[:digit:]]');
MySQL
V MySQL můžeme použít NOT REGEX
funkce:
SELECT ProductName
FROM Products
WHERE ProductName NOT REGEXP '[0-9]+';
Jiný způsob, jak to napsat, je tento:
SELECT ProductName
FROM Products
WHERE NOT (ProductName REGEXP '[0-9]+');
Nebo můžeme použít [:digit:]
Třída znaků POSIX:
SELECT ProductName
FROM Products
WHERE NOT (ProductName REGEXP '[[:digit:]]');
MariaDB
V MariaDB můžeme použít její implementaci NOT REGEX
funkce:
SELECT ProductName
FROM Products
WHERE ProductName NOT REGEXP '[0-9]+';
Jiný způsob, jak to napsat, je tento:
SELECT ProductName
FROM Products
WHERE NOT (ProductName REGEXP '[0-9]+');
Nebo můžeme použít [:digit:]
Třída znaků POSIX:
SELECT ProductName
FROM Products
WHERE NOT (ProductName REGEXP '[[:digit:]]');
PostgreSQL
Zde je návod, jak to můžeme udělat v Postgres:
SELECT ProductName
FROM Products
WHERE ProductName !~ '[0-9]+';
SQLite
V SQLite můžeme udělat toto:
SELECT ProductName
FROM Products
WHERE ProductName NOT REGEXP '[0-9]+';
V SQLite, REGEXP
Operátor je speciální syntaxe pro REGEXP()
uživatelskou funkci, takže můžeme také provést následující:
SELECT ProductName
FROM Products
WHERE NOT REGEXP('[0-9]+', ProductName);