Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да намерите нечислови стойности в колона в MySQL

В MySQL можете да изпълните заявка като следната, за да върнете нечислови данни от колоната.

Това може да бъде полезно, ако някога намерите колона, която съдържа числови данни, но е настроена като varchar или char колона. Можете да използвате тази заявка, за да намерите всякакви нечислови стойности, които може да са били вмъкнати в колоната. След това можете да се справите с него по всякакъв начин, като например да ги преобразувате в числови, след което да промените типа на колоната.

Примерни данни

Да предположим, че създаваме таблица като тази:

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;

Таблицата е създадена и съдържа следните редове:

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

Колоната е varchar(255) колона, така че не е числова. Може (и съдържа) числа, но те се съхраняват като данни за знаци. Може също да съдържа произволен текст (което прави).

Връщане на всички нечислови стойности

Можем да използваме следната заявка, за да върнем нечислови стойности от горната таблица:

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

Резултат:

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

Връщане на нецели числа

Ако искаме да върнем само нецели числа, заявката може да бъде много по-проста:

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

Резултат:

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

Не съдържа цифрови данни

Ако просто искаме да намерим редове, които не съдържат никакви цифрови данни, можем да направим следното:

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

Резултат:

+------+
| 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. Използване на изгледи на MySQL

  2. SQL разделен ред, разделен със запетая

  3. Възможно ли е да се посочи една колона като множество външни ключове?

  4. Урок за архивиране и възстановяване (експортиране и импортиране) на MySQL бази данни

  5. Първичният ключ автоматично ли се индексира в MySQL?