Contoh SQLite berikut hanya mengembalikan baris yang memiliki nilai non-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 mengecualikan tipe numerik (real
dan integer
) agar tidak dikembalikan dalam kueri:
SELECT c1
FROM t1
WHERE typeof(c1) <> 'real'
AND typeof(c1) <> 'integer';
Hasil:
c1 --------- Ten 5 Dollars
Berikut contoh lain 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
Ini menunjukkan kepada kita bahwa hanya dua baris terakhir yang berisi data non-numerik (mereka berisi text
data).
REGEXP
Fungsi
Pilihan lain adalah menggunakan REGEXP
untuk meneruskan ekspresi reguler untuk mengembalikan hanya nilai-nilai yang cocok dengan pola yang diberikan.
Contoh:
SELECT c1
FROM t1
WHERE c1 NOT REGEXP '^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$';
Hasil:
c1 --------- Ten 5 Dollars
Mengembalikan Non-Bilangan Bulat
Jika kita hanya ingin mengembalikan non-bilangan bulat, kita dapat melakukan hal berikut:
SELECT c1
FROM t1
WHERE typeof(c1) <> 'integer';
Hasil:
c1 ---------- 0.0 73.45 73.45 -73.45 0.246 -3400000.0 0.012 12000.0 Ten 5 Dollars
Ini juga mengecualikan bilangan bulat yang ditandatangani.
Atau kita bisa menggunakan ekspresi reguler jika persyaratan kita lebih spesifik:
SELECT c1
FROM t1
WHERE c1 NOT REGEXP '^[0-9]+$';
Hasil:
c1 ---------- -1 0.0 73.45 73.45 -73.45 0.246 -3400000.0 0.012 12000.0 Ten 5 Dollars
Tidak Mengandung Data Numerik
Jika kita 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 --- Ten