MariaDB
 sql >> база данни >  >> RDS >> MariaDB

2 начина за връщане на редове, които съдържат само буквено-цифрови знаци в MariaDB

По-долу са два метода за връщане на редове, които съдържат само буквено-цифрови знаци в MariaDB.

Буквено-цифровите знаци са букви и цифри.

Примерни данни

Ще използваме следните данни за нашите примери:

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;

Резултат:

+----------------------+
| 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                |
+----------------------+

Опция 1:Сравнете с [:alnum:]

Възможността за регулярни изрази на MariaDB включва поддръжка за POSIX символните класове. Следователно можем да използваме [:alnum:] POSIX символен клас в нашите регулярни изрази, за да намерите редовете, които съдържат буквено-цифрови знаци.

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

Резултат:

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

Това върна само онези редове, които не съдържат нищо освен буквено-цифрови знаци. Ако един ред съдържа както буквено-цифрови, така и не-буквени знаци, той не се връща.

Обърнете внимание, че символът за интервал се счита за небуквен и цифров и така, ако искаме да включим интервали, можем да направим това:

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

Резултат:

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

За да върнете всички редове, които съдържат буквено-цифрови знаци (дори редът да съдържа и не-буквени знаци), можем да направим това:

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

Резултат:

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

Опция 2:Посочете диапазон от знаци

Друг начин да го направите е да посочите диапазон от знаци във вашия регулярен израз.

Пример:

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

Резултат:

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

Ще забележите, че това върна по-малко редове, отколкото с първия ни пример. Това е така, защото не включих é , É , или ø символи в моя диапазон и така всички редове, които съдържат тези знаци, са изключени от изхода.

Ето защо ще трябва да внимавате, когато използвате този метод, в случай че случайно изключите знаци, които трябва да включите.

Въпреки това, в съответствие с този диапазон, можем да включим интервали като това:

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

Резултат:

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

И можем да използваме следното, за да включим всички редове, които съдържат знаци от нашия диапазон (дори и те да съдържат знаци извън този диапазон):

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

Резултат:

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 2 начина да разберете към кое тримесечие принадлежи датата в MariaDB

  2. MariaDB RTRIM() срещу RTRIM_ORACLE():Каква е разликата?

  3. MariaDB FLOOR() срещу TRUNCATE()

  4. Как работи FIND_IN_SET() в MariaDB

  5. Как DATE_ADD() работи в MariaDB