Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Cara Menemukan Nilai Non-Numerik di Kolom di MySQL

Di MySQL, Anda dapat menjalankan kueri seperti berikut untuk mengembalikan data non-numerik dari kolom.

Ini dapat membantu jika Anda pernah menemukan kolom yang berisi data numerik, tetapi kolom tersebut disiapkan sebagai varchar atau char kolom. Anda dapat menggunakan kueri ini untuk menemukan nilai non-numerik yang mungkin telah dimasukkan ke dalam kolom. Anda kemudian dapat menanganinya dengan cara apa pun yang Anda suka, seperti mengonversinya menjadi numerik, lalu mengubah jenis kolom.

Contoh Data

Misalkan kita membuat tabel seperti ini:

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;

Tabel telah dibuat dan berisi baris berikut:

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

Kolomnya adalah varchar(255) kolom, jadi bukan numerik. Itu dapat (dan memang) berisi angka tetapi ini disimpan sebagai data karakter. Itu juga dapat berisi teks arbitrer (yang memang benar).

Kembalikan Semua Nilai Non-Numerik

Kita dapat menggunakan kueri berikut untuk mengembalikan nilai non-numerik dari tabel di atas:

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

Hasil:

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

Mengembalikan Non-Bilangan Bulat

Jika kita hanya ingin mengembalikan non-bilangan bulat, kuerinya bisa jauh lebih sederhana:

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

Hasil:

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

Tidak Mengandung Data Numerik

Jika kita hanya ingin menemukan baris yang tidak berisi data numerik, kita dapat melakukan hal berikut:

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

Hasil:

+------+
| 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. Menggunakan SqlDataAdapter untuk menyisipkan baris

  2. Kapitalisasi huruf pertama. MySQL

  3. Transmisikan dari VARCHAR ke INT - MySQL

  4. Cara Menghitung Margin Di MySQL

  5. Ambil TOP 10 Baris Tanpa Menggunakan TOP atau LIMIT? – Pertanyaan Wawancara Minggu Ini #247