Ако имате колона в таблица на база данни, която съдържа данни за знаци, но някои редове също съдържат числа, можете да използвате следните SQL заявки, за да върнете само онези редове, които не съдържат числа в стойността.
Строго погледнато, числата могат да бъдат представени с цифрови цифри, думи и други символи, но за целите на тази статия „число“ означава „числова цифра“. Така че намираме стойности, които не съдържат никакви цифрови цифри.
Заявката, която използвате, ще зависи от вашата СУБД.
SQL сървър
В SQL Server можем да използваме заявка като тази:
SELECT ProductName
FROM Products
WHERE ProductName NOT LIKE '%[0-9]%';
Тук връщаме всички редове, където ProductName
колоната не съдържа никакви цифрови цифри.
Оракул
В Oracle можем да използваме REGEXP_LIKE()
функция:
SELECT ProductName
FROM Products
WHERE NOT REGEXP_LIKE(ProductName, '[0-9]+');
В този случай предоставяме модел на регулярен израз, който съответства на стойностите, които не искаме да бъдат връщани. Стойностите всъщност са съвпадащи, но ние също така отричаме съвпадението, като използваме NOT
, което означава, че всичко, което не съвпада, се връща.
Друг начин да го направите е да използвате [:digit:]
POSIX клас символи:
SELECT ProductName
FROM Products
WHERE NOT REGEXP_LIKE(ProductName, '[[:digit:]]');
MySQL
В MySQL можем да използваме NOT REGEX
функция:
SELECT ProductName
FROM Products
WHERE ProductName NOT REGEXP '[0-9]+';
Друг начин да го напишете е така:
SELECT ProductName
FROM Products
WHERE NOT (ProductName REGEXP '[0-9]+');
Или можем да използваме [:digit:]
POSIX клас символи:
SELECT ProductName
FROM Products
WHERE NOT (ProductName REGEXP '[[:digit:]]');
MariaDB
В MariaDB можем да използваме неговата реализация на NOT REGEX
функция:
SELECT ProductName
FROM Products
WHERE ProductName NOT REGEXP '[0-9]+';
Друг начин да го напишете е така:
SELECT ProductName
FROM Products
WHERE NOT (ProductName REGEXP '[0-9]+');
Или можем да използваме [:digit:]
POSIX клас символи:
SELECT ProductName
FROM Products
WHERE NOT (ProductName REGEXP '[[:digit:]]');
PostgreSQL
Ето как можем да го направим в Postgres:
SELECT ProductName
FROM Products
WHERE ProductName !~ '[0-9]+';
SQLite
В SQLite можем да направим това:
SELECT ProductName
FROM Products
WHERE ProductName NOT REGEXP '[0-9]+';
В SQLite, REGEXP
операторът е специален синтаксис за REGEXP()
потребителска функция, така че можем да направим и следното:
SELECT ProductName
FROM Products
WHERE NOT REGEXP('[0-9]+', ProductName);