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

Върнете само числови стойности в MariaDB

Следващите примери за MariaDB връщат само онези редове, които имат числови стойности в дадена колона.

Тези примери използват REGEXP функция за връщане на стойности, които съответстват на посочения модел.

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

Да предположим, че създаваме таблица като тази:

DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
    c1 varchar(255)
);

INSERT INTO t1 (c1) VALUES 
    ('0'),
    ('1'),
    ('+1'),
    ('-1'),
    ('00.00'),
    ('73.45'),
    ('+73.45'),
    ('-73.45'),
    ('.246'),
    ('-.34e7'),
    ('12.e-3'),
    ('1.2e+4'),
    ('a'),
    ('9afc'),
    ('e7'),
    ('+e0'),
    ('Ten'),
    ('5 Dollars');

SELECT * FROM t1;

Таблицата вече е създадена и съдържа следните данни:

+-----------+
| c1        |
+-----------+
| 0         |
| 1         |
| +1        |
| -1        |
| 00.00     |
| 73.45     |
| +73.45    |
| -73.45    |
| .246      |
| -.34e7    |
| 12.e-3    |
| 1.2e+4    |
| a         |
| 9afc      |
| e7        |
| +e0       |
| Ten       |
| 5 Dollars |
+-----------+

Колоната е varchar(255) колона, така че не е числова. Може (и съдържа) числа, но те се съхраняват като данни за знаци. Може също да съдържа произволен текст (което прави).

Връщане на всички числови стойности

Можем да използваме следната заявка, за да върнем всички числови стойности от горната таблица:

SELECT c1
FROM t1 
WHERE c1 REGEXP '^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$';

Резултат:

+--------+
| c1     |
+--------+
| 0      |
| 1      |
| +1     |
| -1     |
| 00.00  |
| 73.45  |
| +73.45 |
| -73.45 |
| .246   |
| -.34e7 |
| 1.2e+4 |
| e7     |
| +e0    |
+--------+

Връщане на цели числа

Ако искаме да върнем само цели числа, заявката може да бъде много по-проста:

SELECT c1
FROM t1 
WHERE c1 REGEXP '^[0-9]+$';

Резултат:

+------+
| c1   |
+------+
| 0    |
| 1    |
+------+

Съдържа числови данни

Ако искаме да намерим редове, които само съдържат числови данни (дори и те да съдържат нечислови данни), можем да направим следното:

SELECT c1 
FROM t1 
WHERE c1 REGEXP '[0-9]+';

Резултат:

+-----------+
| c1        |
+-----------+
| 0         |
| 1         |
| +1        |
| -1        |
| 00.00     |
| 73.45     |
| +73.45    |
| -73.45    |
| .246      |
| -.34e7    |
| 12.e-3    |
| 1.2e+4    |
| 9afc      |
| e7        |
| +e0       |
| 5 Dollars |
+-----------+

Символни класове POSIX

MariaDB поддържа POSIX символни класове, което означава, че можем да използваме [:digit:] вместо [0-9] в нашите регулярни изрази.

Пример:

SELECT c1
FROM t1 
WHERE c1 REGEXP '^[[:digit:]]?$';

Резултат:

+------+
| c1   |
+------+
| 0    |
| 1    |
+------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Сравняване на MariaDB сървър с MariaDB клъстер

  2. 8 начина за добавяне на микросекунди към стойност за дата и час в MariaDB

  3. MariaDB CURRENT_ROLE() Обяснено

  4. 4 функции за връщане на месеца от дата в MariaDB

  5. Как да направите вашата MySQL или MariaDB база данни високодостъпна в AWS и Google Cloud