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