MariaDB
 sql >> Baza danych >  >> RDS >> MariaDB

Zwróć tylko wartości liczbowe w MariaDB

Poniższe przykłady MariaDB zwracają tylko te wiersze, które mają wartości liczbowe w danej kolumnie.

W tych przykładach użyto REGEXP funkcja zwracająca wartości pasujące do określonego wzorca.

Przykładowe dane

Załóżmy, że tworzymy taką tabelę:

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;

Tabela została utworzona i zawiera następujące dane:

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

Kolumna to varchar(255) kolumna, więc nie jest liczbowa. Może (i zawiera) liczby, ale są one przechowywane jako dane znakowe. Może również zawierać dowolny tekst (co robi).

Zwróć wszystkie wartości liczbowe

Możemy użyć następującego zapytania, aby zwrócić wszystkie wartości liczbowe z powyższej tabeli:

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

Wynik:

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

Zwracane liczby całkowite

Jeśli chcemy zwrócić tylko liczby całkowite, zapytanie może być dużo prostsze:

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

Wynik:

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

Zawiera dane liczbowe

Jeśli chcemy znaleźć wiersze, które tylko zawierają dane numeryczne (nawet jeśli zawierają również dane nienumeryczne), możemy wykonać następujące czynności:

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

Wynik:

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

Klasy znaków POSIX

MariaDB obsługuje klasy znaków POSIX, co oznacza, że ​​możemy użyć [:digit:] zamiast [0-9] w naszych wyrażeniach regularnych.

Przykład:

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

Wynik:

+------+
| 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. Jak EXP() działa w MariaDB

  2. Zrozumienie indeksów w MySQL:część druga

  3. Jak SPACE() działa w MariaDB

  4. 3 sposoby na sortowanie serwerów w MariaDB

  5. COUNT() Funkcja w MariaDB