sql >> Databasteknik >  >> RDS >> Mysql

Hur man hittar icke-numeriska värden i en kolumn i MySQL

I MySQL kan du köra en fråga som följande för att returnera icke-numeriska data från kolumnen.

Detta kan vara användbart om du någonsin hittar en kolumn som innehåller numerisk data, men den har ställts in som en varchar eller char kolumn. Du kan använda den här frågan för att hitta alla icke-numeriska värden som kan ha infogats i kolumnen. Du kan sedan hantera det som du vill, till exempel konvertera dem till numeriska och sedan ändra kolumntyp.

Exempeldata

Anta att vi skapar en tabell så här:

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 har skapats och innehåller följande rader:

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

Kolumnen är en varchar(255) kolumn, så den är inte numerisk. Det kan (och innehåller) siffror men dessa lagras som teckendata. Den kan också innehålla godtycklig text (vilket den gör).

Returnera alla icke-numeriska värden

Vi kan använda följande fråga för att returnera icke-numeriska värden från tabellen ovan:

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

Returnera icke-heltal

Om vi ​​bara vill returnera icke-heltal kan frågan vara mycket enklare:

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

Innehåller inte numerisk data

Om vi ​​bara vill hitta rader som inte innehåller några numeriska data kan vi göra följande:

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

Resultat:

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

  1. Hur man beräknar en kvadrat i SQL Server

  2. Fyller i saknade datum per grupp

  3. Lägga till data till en Cloud Firestore-databas

  4. ORA-01097