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