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

Jak znaleźć wartości nieliczbowe w kolumnie w MySQL?

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

Może to być przydatne, jeśli kiedykolwiek znajdziesz kolumnę zawierającą dane liczbowe, ale została ona skonfigurowana jako varchar lub char kolumna. Za pomocą tego zapytania można znaleźć dowolne wartości nieliczbowe, które mogły zostać wstawione do kolumny. Następnie możesz sobie z tym poradzić w dowolny sposób, na przykład przekonwertować je na wartości liczbowe, a następnie zmienić typ 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'),
    ('.5'),
    ('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 wiersze:

+-----------+
| c1        |
+-----------+
| 0         |
| 1         |
| +1        |
| -1        |
| .5        |
| 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        |
| .5        |
| 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  |
+------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zaznaczyć wszystkie kolumny z wyjątkiem jednej w MySQL?

  2. Czy możesz użyć aliasu w klauzuli WHERE w mysql?

  3. O Neo4j

  4. Jaka jest różnica między znacznikiem a nawiasem kwadratowym w instrukcjach SQL?

  5. Skonfiguruj replikację bazy danych Master-Master MySQL