Poniżej znajdują się dwie metody zwracania wierszy zawierających tylko znaki niealfanumeryczne w MariaDB.
Znaki inne niż alfanumeryczne obejmują znaki interpunkcyjne, takie jak example@sqldat.com#&()–[{}]:;',?/* i symbole, takie jak `~$^+=<>“ , a także znaki odstępu, takie jak spacja lub tabulatory.
Przykładowe dane
W naszych przykładach użyjemy następujących danych:
CREATE TABLE t1 (
c1 varchar(255) NULL
);
INSERT INTO t1 VALUES
('Music'),
('Live Music'),
('Café'),
('Café Del Mar'),
('100 Cafés'),
('example@sqldat.com'),
('1 + 1'),
('()'),
('example@sqldat.com#&()–[{}]:;'',?/*'),
('`~$^+=<>“'),
('$1.50'),
('Player 456'),
('007'),
(null),
(''),
('é'),
('É'),
('é 123'),
('ø'),
('ø 123');
SELECT c1 FROM t1; Wynik:
+----------------------+
| c1 |
+----------------------+
| Music |
| Live Music |
| Café |
| Café Del Mar |
| 100 Cafés |
| example@sqldat.com |
| 1 + 1 |
| () |
| example@sqldat.com#&()–[{}]:;',?/* |
| `~$^+=<>“ |
| $1.50 |
| Player 456 |
| 007 |
| NULL |
| |
| é |
| É |
| é 123 |
| ø |
| ø 123 |
+----------------------+ Opcja 1:Porównaj z [:alnum:]
Funkcja wyrażeń regularnych MariaDB obejmuje obsługę klas znaków POSIX. Dlatego możemy użyć [:alnum:] Klasa znaków POSIX w naszych wyrażeniach regularnych, aby znaleźć wiersze zawierające tylko znaki alfanumeryczne, a następnie zanegować to za pomocą NOT operatora.
SELECT c1 FROM t1
WHERE c1 NOT REGEXP '[[:alnum:]]'; Wynik:
+----------------------+
| c1 |
+----------------------+
| () |
| example@sqldat.com#&()–[{}]:;',?/* |
| `~$^+=<>“ |
| |
+----------------------+
Jeśli chcesz wykluczyć określony znak, zawsze możesz użyć NULLIF() funkcjonować.
Na przykład wykluczmy pusty ciąg z ostatniego wiersza:
SELECT c1 FROM t1
WHERE NULLIF(c1, '') NOT REGEXP '[[:alnum:]]'; Wynik:
+----------------------+
| c1 |
+----------------------+
| () |
| example@sqldat.com#&()–[{}]:;',?/* |
| `~$^+=<>“ |
+----------------------+ Opcja 2:Określ zakres znaków
Innym sposobem na to jest określenie zakresu znaków w wyrażeniu regularnym.
Przykład:
SELECT c1 FROM t1
WHERE c1 NOT REGEXP '[A-Za-z0-9]'; Wynik:
+----------------------+
| c1 |
+----------------------+
| () |
| example@sqldat.com#&()–[{}]:;',?/* |
| `~$^+=<>“ |
| |
| é |
| É |
| ø |
+----------------------+ Aby usunąć pusty ciąg:
SELECT c1 FROM t1
WHERE NULLIF(c1, '') NOT REGEXP '[A-Za-z0-9]'; Wynik:
+----------------------+
| c1 |
+----------------------+
| () |
| example@sqldat.com#&()–[{}]:;',?/* |
| `~$^+=<>“ |
| é |
| É |
| ø |
+----------------------+
W tym przypadku mój zakres wykluczeń nie obejmował znaków alfanumerycznych, takich jak é , É i ø , a więc dane wyjściowe nie są prawdziwą reprezentacją znaków niealfanumerycznych. To powiedziawszy, przynajmniej ta metoda daje możliwość określenia dokładnych znaków, które chcesz uwzględnić lub wykluczyć z wyniku.