sql >> Databáze >  >> RDS >> Mysql

Jak najít nečíselné hodnoty ve sloupci v MySQL

V MySQL můžete spustit dotaz podobný následujícímu a vrátit nečíselná data ze sloupce.

To může být užitečné, pokud někdy najdete sloupec, který obsahuje číselná data, ale byl nastaven jako varchar nebo char sloupec. Tento dotaz můžete použít k nalezení jakýchkoli nečíselných hodnot, které mohly být vloženy do sloupce. Poté s nimi můžete nakládat libovolným způsobem, například je převést na číselné a poté změnit typ sloupce.

Ukázková data

Předpokládejme, že vytvoříme tabulku takto:

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;

Tabulka byla vytvořena a obsahuje následující řádky:

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

Sloupec je varchar(255) sloupec, takže není číselný. Může (a obsahuje) čísla, ale ty jsou uloženy jako znaková data. Může také obsahovat libovolný text (což obsahuje).

Vrátit všechny nečíselné hodnoty

K vrácení nečíselných hodnot z výše uvedené tabulky můžeme použít následující dotaz:

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

Výsledek:

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

Vrátí jiná než celá čísla

Pokud chceme vrátit pouze necelá čísla, může být dotaz mnohem jednodušší:

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

Výsledek:

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

Neobsahuje číselná data

Pokud chceme pouze najít řádky, které neobsahují žádná číselná data, můžeme provést následující:

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

Výsledek:

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

  1. Jak Cos() funguje v PostgreSQL

  2. Přesunout systémové databáze v clusteru převzetí služeb při selhání serveru SQL Server

  3. přístup k aliasům sloupců v klauzuli where v postgresql

  4. Poškození databáze