Jika Anda pernah menemukan kolom karakter yang seharusnya berupa kolom numerik, selalu ada kemungkinan kolom tersebut berisi data non-numerik yang tidak Anda ketahui.
Di MariaDB, Anda dapat menjalankan kueri seperti berikut untuk mengembalikan data non-numerik dari 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'),
('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;
SELECT
. itu pernyataan di akhir menghasilkan ini:
+-----------+ | c1 | +-----------+ | 0 | | 1 | | +1 | | -1 | | 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 | | 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 | +------+
Kita dapat menggunakan kelas POSIX untuk mendapatkan hasil yang sama:
SELECT c1
FROM t1
WHERE c1 NOT REGEXP '[[:digit:]]';
Hasil:
+------+ | c1 | +------+ | a | | Ten | +------+