Mysql
 sql >> Baza danych >  >> RDS >> Mysql

2 sposoby zwracania wierszy zawierających tylko znaki niealfanumeryczne w MySQL

Poniżej znajdują się dwie opcje wyszukiwania wierszy zawierających tylko znaki niealfanumeryczne w MySQL.

Znaki inne niż alfanumeryczne obejmują znaki interpunkcyjne, takie jak [email protected]#&()–[{}]:;',?/* 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'),
    ('[email protected]'),
    ('1 + 1'),
    ('()'),
    ('[email protected]#&()–[{}]:;'',?/*'),
    ('`~$^+=<>“'),
    ('$1.50'),
    ('Player 456'),
    ('007'),
    (null),
    (''),
    ('é'),
    ('É'),
    ('é 123'),
    ('ø'),
    ('ø 123');
SELECT c1 FROM t1;

Wynik:

+----------------------+
| c1                   |
+----------------------+
| Music                |
| Live Music           |
| Café                 |
| Café Del Mar         |
| 100 Cafés            |
| [email protected]    |
| 1 + 1                |
| ()                   |
| [email protected]#&()–[{}]:;',?/*   |
| `~$^+=<>“            |
| $1.50                |
| Player 456           |
| 007                  |
| NULL                 |
|                      |
| é                    |
| É                    |
| é 123                |
| ø                    |
| ø 123                |
+----------------------+

Opcja 1:Porównaj z [:alnum:]

Możemy użyć REGEXP MySQL operator, aby porównać naszą kolumnę z wyrażeniem regularnym.

Możliwości wyrażeń regularnych MySQL obejmują 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                   |
+----------------------+
| ()                   |
| [email protected]#&()–[{}]:;',?/*   |
| `~$^+=<>“            |
|                      |
+----------------------+

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                   |
+----------------------+
| ()                   |
| [email protected]#&()–[{}]:;',?/*   |
| `~$^+=<>“            |
+----------------------+

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                   |
+----------------------+
| ()                   |
| [email protected]#&()–[{}]:;',?/*   |
| `~$^+=<>“            |
|                      |
| é                    |
| É                    |
| ø                    |
+----------------------+

Aby usunąć pusty ciąg:

SELECT c1 FROM t1
WHERE NULLIF(c1, '') NOT REGEXP '[A-Za-z0-9]';

Wynik:

+----------------------+
| c1                   |
+----------------------+
| ()                   |
| [email protected]#&()–[{}]:;',?/*   |
| `~$^+=<>“            |
| é                    |
| É                    |
| ø                    |
+----------------------+

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.

Alternatywy dla REGEXP

W MySQL RLIKE i REGXP operatory są synonimami dla REGEXP_LIKE() . Dlatego możemy zastąpić dowolny z poprzednich przykładów przez NOT RLIKE lub NOT REGEXP_LIKE() .

Przykład RLIKE :

SELECT c1 FROM t1 
WHERE c1 NOT RLIKE '[[:alnum:]]';

Przykład REGEXP_LIKE() :

SELECT c1 FROM t1 
WHERE NOT REGEXP_LIKE(c1, '[[:alnum:]]');

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zarządzać bazami danych, użytkownikami i tabelami MySQL z wiersza poleceń

  2. Wstaw wiele wierszy za pomocą jednego zapytania MySQL

  3. Jak ustawić hasło roota na null?

  4. Limit rozmiaru importu pliku w PHPMyAdmin

  5. Znaki specjalne w nazwie tabeli MySQL