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

2 sposoby zwracania wierszy zawierających znaki alfanumeryczne w MySQL

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

Znaki alfanumeryczne to znaki alfabetu i znaki numeryczne.

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 do znajdowania wierszy zawierających znaki alfanumeryczne.

SELECT c1 FROM t1 
WHERE c1 REGEXP '^[[:alnum:]]+$';

Wynik:

+-------+
| c1    |
+-------+
| Music |
| Café  |
| 007   |
| é     |
| É     |
| ø     |
+-------+

To zwróciło tylko te wiersze, które zawierają tylko znaki alfanumeryczne. Jeśli wiersz zawiera zarówno znaki alfanumeryczne, jak i niealfanumeryczne, nie jest on zwracany.

Znak spacji jest uważany za niealfanumeryczny, więc jeśli chcemy uwzględnić spacje, możemy to zrobić:

SELECT c1 FROM t1 
WHERE c1 REGEXP '^[[:alnum:] ]+$';

Wynik:

+---------------+
| c1            |
+---------------+
| Music         |
| Live Music    |
| Café          |
| Café Del Mar  |
| 100 Cafés     |
| Player 456    |
| 007           |
| é             |
| É             |
| é 123         |
| ø             |
| ø 123         |
+---------------+

Aby zwrócić wszystkie wiersze, które zawierają znaki alfanumeryczne (nawet jeśli wiersz zawiera również znaki niealfanumeryczne), możemy to zrobić:

SELECT c1 FROM t1 
WHERE c1 REGEXP '[[:alnum:]]';

Wynik:

+-------------------+
| c1                |
+-------------------+
| Music             |
| Live Music        |
| Café              |
| Café Del Mar      |
| 100 Cafés         |
| [email protected] |
| 1 + 1             |
| $1.50             |
| Player 456        |
| 007               |
| é                 |
| É                 |
| é 123             |
| ø                 |
| ø 123             |
+-------------------+

Opcja 2:Określ zakres znaków

Innym sposobem na to jest dostarczenie wyrażenia regularnego, które zawiera szereg znaków. Nadal możemy używać REGEXP operatora, aby to zrobić.

Przykład:

SELECT c1 FROM t1 
WHERE c1 REGEXP '^[A-Za-z0-9]+$';

Wynik:

+-------+
| c1    |
+-------+
| Music |
| 007   |
+-------+

Zwróciło to mniej wierszy niż w naszym pierwszym przykładzie. To dlatego, że nie dodałem é , É lub ø znaków w moim zakresie, więc wszystkie wiersze zawierające te znaki są wykluczane z danych wyjściowych.

Dlatego musisz zachować ostrożność podczas korzystania z tej metody, na wypadek przypadkowego wykluczenia znaków, które powinieneś uwzględnić.

Jednak trzymając się tego zakresu, możemy uwzględnić spacje takie jak:

SELECT c1 FROM t1 
WHERE c1 REGEXP '^[A-Za-z0-9 ]+$';

Wynik:

+------------+
| c1         |
+------------+
| Music      |
| Live Music |
| Player 456 |
| 007        |
+------------+

Możemy użyć poniższych, aby uwzględnić wszystkie wiersze, które zawierają znaki z naszego zakresu (nawet jeśli zawierają również znaki spoza tego zakresu):

SELECT c1 FROM t1 
WHERE c1 REGEXP '[A-Za-z0-9]';

Wynik:

+-------------------+
| c1                |
+-------------------+
| Music             |
| Live Music        |
| Café              |
| Café Del Mar      |
| 100 Cafés         |
| [email protected] |
| 1 + 1             |
| $1.50             |
| Player 456        |
| 007               |
| é 123             |
| ø 123             |
+-------------------+

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 RLIKE lub REGEXP_LIKE() .

Przykład RLIKE :

SELECT c1 FROM t1 
WHERE c1 RLIKE '^[[:alnum:]]+$';

Przykład REGEXP_LIKE() :

SELECT c1 FROM t1 
WHERE 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. JSON_INSERT() – Wstaw wartości do dokumentu JSON w MySQL

  2. Jak przekonwertować czas MySQL

  3. Zaktualizuj tryb SQL w MySQL

  4. Brak mapowania dialektu dla typu JDBC:1111

  5. Migracja bazy danych MySQL z Amazon RDS do DigitalOcean