sql >> Databáze >  >> RDS >> MariaDB

Najděte všechny nečíselné hodnoty ve sloupci v MariaDB

Pokud někdy narazíte na sloupec znaků, který by měl být číselným sloupcem, vždy existuje možnost, že obsahuje nečíselná data, o kterých nevíte.

V MariaDB můžete spustit dotaz podobný následujícímu a vrátit nečíselná data ze 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'),
    ('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 příkaz na konci má za následek toto:

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

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 nenumerické 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átit 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        |
| 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  |
+------+

Můžeme použít třídu POSIX, abychom získali stejný výsledek:

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

Výsledek:

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

  1. Jak změnit sloupec z hodnoty Null na hodnotu Not Null na serveru SQL Server

  2. Zdroje zálohování databáze MySQL a MariaDB

  3. Jak reprezentovat Oracle Interval v Javě

  4. Upozornění na sloupec v cizím klíči, který není součástí indexu, během kompilace místnosti Android. Co to znamená?