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

Znajdź wszystkie wartości nieliczbowe w kolumnie w MariaDB

Jeśli kiedykolwiek napotkasz kolumnę znakową, która powinna być kolumną numeryczną, zawsze istnieje możliwość, że zawiera ona dane nieliczbowe, o których nie wiesz.

W MariaDB możesz uruchomić zapytanie podobne do poniższego, aby zwrócić dane nieliczbowe z kolumny.

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;

Ten SELECT oświadczenie na końcu daje następujące wyniki:

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

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

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

Wynik:

+-----------+
| c1        |
+-----------+
| 12.e-3    |
| a         |
| 9afc      |
| Ten       |
| 5 Dollars |
+-----------+

Zwróć liczby niebędące liczbami całkowitymi

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

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

Wynik:

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

Nie zawiera danych liczbowych

Jeśli chcemy tylko znaleźć wiersze, które nie zawierają żadnych danych liczbowych, możemy wykonać następujące czynności:

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

Wynik:

+------+
| c1   |
+------+
| a    |
| Ten  |
+------+

Możemy użyć klasy POSIX, aby uzyskać ten sam wynik:

SELECT c1
FROM t1 
WHERE c1 NOT REGEXP '[[:digit:]]';

Wynik:

+------+
| c1   |
+------+
| a    |
| Ten  |
+------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Używanie Sysbench do generowania danych testowych dla tabeli podzielonej na fragmenty w MySQL

  2. 3 sposoby na zwrot modułu Modulo w MariaDB

  3. Jak zainstalować MariaDB 10 na RHEL 8?

  4. Połączenia HAProxy a połączenia MySQL — co powinieneś wiedzieć

  5. Jak działa REVERSE() w MariaDB