Contoh SQLite berikut hanya mengembalikan baris yang memiliki nilai numerik dalam kolom tertentu.
Contoh Data
Mari kita buat tabel dengan contoh data:
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
c1
);
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),
('Ten'),
('5 Dollars');
SELECT * FROM t1;
Tabel sekarang telah dibuat dan berisi data berikut:
c1 ---------- 0 1 1 -1 0.0 73.45 73.45 -73.45 0.246 -3400000.0 0.012 12000.0 Ten 5 Dollars
SQLite menggunakan sistem tipe dinamis, di mana tipe data dari suatu nilai dikaitkan dengan nilai itu sendiri, bukan kolom (seperti kebanyakan RDBMS lainnya). Saat saya membuat tabel, saya tidak menentukan tipe data. Oleh karena itu, nilainya dapat berupa jenis apa pun.
The Typeof()
Fungsi
Kita dapat menggunakan fungsi typeof() SQLite untuk memfilter hasil menjadi tipe numerik saja (real
dan integer
):
SELECT c1
FROM t1
WHERE typeof(c1) = 'real'
OR typeof(c1) = 'integer';
Hasil:
c1 ---------- 0 1 1 -1 0.0 73.45 73.45 -73.45 0.246 -3400000.0 0.012 12000.0
Untuk memperjelas, berikut adalah contoh yang menampilkan tipe data untuk setiap baris:
SELECT
c1,
typeof(c1)
FROM t1;
Hasil:
c1 typeof(c1) ---------- ---------- 0 integer 1 integer 1 integer -1 integer 0.0 real 73.45 real 73.45 real -73.45 real 0.246 real -3400000.0 real 0.012 real 12000.0 real Ten text 5 Dollars text
REGEXP
Fungsi
Jika kami memiliki persyaratan yang lebih spesifik, kami juga dapat menggunakan REGEXP
untuk meneruskan ekspresi reguler untuk mengembalikan hanya nilai-nilai yang cocok dengan pola yang diberikan.
Contoh:
SELECT c1
FROM t1
WHERE c1 REGEXP '^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$';
Hasil:
c1 ---------- 0 1 1 -1 0.0 73.45 73.45 -73.45 0.246 -3400000.0 0.012 12000.0
Kembalikan Bilangan Bulat
Jika kita hanya ingin mengembalikan bilangan bulat, kita dapat menyederhanakan query sebagai berikut:
SELECT c1
FROM t1
WHERE typeof(c1) = 'integer';
Hasil:
c1 -- 0 1 1 -1
Ini juga mengembalikan bilangan bulat yang ditandatangani.
Atau kita bisa menggunakan ekspresi reguler jika persyaratan kita lebih spesifik:
SELECT c1
FROM t1
WHERE c1 REGEXP '^[0-9]+$';
Hasil:
c1 -- 0 1 1
Berisi Data Numerik
Jika kita ingin mencari baris yang berisi data numerik (walaupun baris tersebut 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 0.0 73.45 73.45 -73.45 0.246 -3400000.0 0.012 12000.0 5 Dollars