sql >> Database teknologi >  >> RDS >> Mysql

Sådan finder du ikke-numeriske værdier i en kolonne i MySQL

I MySQL kan du køre en forespørgsel som følgende for at returnere ikke-numeriske data fra kolonnen.

Dette kan være nyttigt, hvis du nogensinde finder en kolonne, der indeholder numeriske data, men den blev sat op som en varchar eller char kolonne. Du kan bruge denne forespørgsel til at finde alle ikke-numeriske værdier, der kan være blevet indsat i kolonnen. Du kan derefter håndtere det, som du vil, såsom at konvertere dem til numeriske, og derefter ændre kolonnetypen.

Eksempel på data

Antag, at vi opretter en tabel som denne:

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;

Tabellen er oprettet og indeholder følgende rækker:

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

Kolonnen er en varchar(255) kolonne, så den er ikke numerisk. Det kan (og gør) indeholde tal, men disse gemmes som tegndata. Den kan også indeholde vilkårlig tekst (hvilket den gør).

Returner alle ikke-numeriske værdier

Vi kan bruge følgende forespørgsel til at returnere ikke-numeriske værdier fra ovenstående tabel:

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

Resultat:

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

Returner ikke-heltal

Hvis vi kun ønsker at returnere ikke-heltal, kan forespørgslen være meget enklere:

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

Resultat:

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

Indeholder ikke numeriske data

Hvis vi bare ønsker at finde rækker, der ikke indeholder nogen numeriske data, kan vi gøre følgende:

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

Resultat:

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

  1. Postgres:Hvordan konverteres en json-streng til tekst?

  2. mysql kontrollere, om tal er i en kommasepareret liste

  3. Sådan afspilles PLAY_SOUND i Oracle Forms

  4. Returner det korte måneds navn fra en dato i Oracle