Materi
Banyak basis data menolak teks di kolom angka. SQLite tidak: dokumentasinya menyebut tipe kolom sebagai afinitas, yaitu tipe yang dianjurkan, bukan diwajibkan, dan kolom apa pun tetap bisa menyimpan data bertipe apa pun. Kolom INTEGER mengubah teks '150' menjadi angka 150, tetapi teks 'Rp150.000' tersimpan apa adanya sebagai teks tanpa pesan galat. Sejak versi 3.37.0 tersedia tabel STRICT yang menolak isian bila nilainya tidak bisa diubah ke tipe kolom tanpa kehilangan, tetapi data yang sudah telanjur masuk tetap harus diperiksa.
Alat pemeriksanya typeof(), yang mengembalikan kelas penyimpanan sebuah nilai: null, integer, real, text, atau blob. Pemeriksaan tipe dijalankan sebelum pemeriksaan rentang, karena aturan pembanding SQLite menempatkan setiap nilai INTEGER atau REAL di bawah nilai TEXT mana pun. Akibatnya teks '96.000' di kolom tanpa tipe lolos syarat total > 0.
Nullability adalah keputusan per kolom: boleh kosong atau tidak. Kontrak juga harus menetapkan arti kosong. NULL berarti nilainya tidak diketahui, teks '' adalah nilai yang ada tetapi tidak berisi, dan 0 adalah angka. COUNT(kolom) menghitung '' sebagai terisi, jadi aturan yang menganggap teks kosong sebagai pelanggaran harus ditulis eksplisit dengan trim(kolom) = ''.
SELECT buku_id, typeof(tahun_terbit) AS tipe
FROM buku
WHERE typeof(tahun_terbit) NOT IN ('integer', 'null');