Contoh MariaDB berikut hanya mengembalikan baris yang memiliki nilai numerik dalam kolom tertentu.
Contoh-contoh ini menggunakan REGEXP
berfungsi untuk mengembalikan nilai yang cocok dengan pola yang ditentukan.
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;
Tabel sekarang telah dibuat dan berisi data berikut:
+-----------+ | 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 Numerik
Kita dapat menggunakan kueri berikut untuk mengembalikan semua nilai numerik dari tabel di atas:
SELECT c1
FROM t1
WHERE c1 REGEXP '^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$';
Hasil:
+--------+ | c1 | +--------+ | 0 | | 1 | | +1 | | -1 | | 00.00 | | 73.45 | | +73.45 | | -73.45 | | .246 | | -.34e7 | | 1.2e+4 | | e7 | | +e0 | +--------+
Kembalikan Bilangan Bulat
Jika kita hanya ingin mengembalikan bilangan bulat, kuerinya bisa jauh lebih sederhana:
SELECT c1
FROM t1
WHERE c1 REGEXP '^[0-9]+$';
Hasil:
+------+ | c1 | +------+ | 0 | | 1 | +------+
Berisi Data Numerik
Jika kita ingin mencari baris yang hanya berisi data numerik (meskipun juga berisi data non-numerik), kita dapat melakukan hal berikut:
SELECT c1
FROM t1
WHERE c1 REGEXP '[0-9]+';
Hasil:
+-----------+ | c1 | +-----------+ | 0 | | 1 | | +1 | | -1 | | 00.00 | | 73.45 | | +73.45 | | -73.45 | | .246 | | -.34e7 | | 12.e-3 | | 1.2e+4 | | 9afc | | e7 | | +e0 | | 5 Dollars | +-----------+
Kelas Karakter POSIX
MariaDB mendukung kelas karakter POSIX, yang berarti kita dapat menggunakan [:digit:]
bukannya [0-9]
dalam ekspresi reguler kami.
Contoh:
SELECT c1
FROM t1
WHERE c1 REGEXP '^[[:digit:]]?$';
Hasil:
+------+ | c1 | +------+ | 0 | | 1 | +------+