Ada dua tipe data berbeda yang memungkinkan kita menyimpan data numerik yang tepat dalam SQL: NUMERIC
dan DECIMAL
.
Pada artikel kali ini saya akan menjelaskan perbedaan dan persamaan jenis-jenis tersebut. Ikuti saja.
1. Perkenalan
Baik NUMERIC
dan DECIMAL
menyimpan bilangan desimal dan menggunakan aritmatika eksak — bukan bilangan floating point (REAL, FLOAT, dll.), yang menyimpan bilangan biner dan menggunakan aritmatika tidak eksak. Jadi, DECIMAL
atau NUMERIC
harus digunakan untuk nilai uang, sedangkan bilangan floating point harus digunakan untuk perhitungan ilmiah.
Kedua tipe ini mengambil argumen presisi dan skala. Presisi adalah jumlah digit maksimum yang dapat dimiliki suatu angka. Skala adalah jumlah digit setelah koma desimal. Untuk bilangan 9167.142 presisinya 7 dan skalanya 3.
Perbedaan utama antara 2 jenis ini adalah cara keduanya menangani nilai presisi. Dalam tipe numerik, nilai presisinya tetap. Artinya, Anda tidak boleh melebihi nilai presisi. Sebaliknya, dalam desimal, Anda dapat melebihi nilai presisi. Ini memberi Anda fleksibilitas dalam jumlah total nilai yang dapat Anda simpan.
Mari kita lihat lebih dekat jenis sintaksis dan definisinya.
2. Definisi NUMERIK
Sintaksnya seperti gambar di bawah ini:
NUMERIC(p, s)
… Di mana:
p
= presisi, atau jumlah digit maksimum yang akan disimpan (termasuk kedua sisi koma desimal). Nilai ini harus antara 1 dan 38. Nilai default untuk p adalah 18.s
= skala, atau jumlah digit di sebelah kanan koma desimal. Ini dapat ditentukan hanya jika presisi (p) ditentukan. Standarnya adalah 0.
Contoh:
DECLARE @MyNumeric NUMERIC(6, 2)
Di sini, presisinya adalah total 6 digit, dengan 2 di sebelah kanan koma desimal. Jadi, angka yang valid adalah 4162.34, 9245.12, yang tidak valid adalah 10729.32 (walaupun ada 2 angka di sebelah kanan koma desimal, presisinya adalah 7, bukan 6).
Rentang nilai yang dapat disimpan NUMERIC
type adalah -10³⁸+1 hingga 10³⁸.
3. Pengertian DESIMAL
Sintaksnya adalah:
DECIMAL(p, s)
… Di mana:
p
= presisi. Tetapi jumlah digit sebenarnya bisa lebih besar dari p.s
= skala, persis seperti skala yang ditentukan untukNUMERIC
.
4. NUMERIK dan DECIMAL di Mesin SQL lainnya
Mari kita lihat beberapa dialek SQL dan cara mereka menangani representasi DECIMAL
dan NUMERIC
.
MySQL
Di MySQL, NUMERIC
type diimplementasikan sebagai DECIMAL
. Jadi tidak perlu khawatir dengan presisi dan perbedaan skala.
PostgreSQL
DECIMAL
diperlakukan persis seperti NUMERIC
. Presisi di DECIMAL
tidak boleh lebih besar dari yang ditentukan.
"Peramal"
Oracle memiliki tipe DECIMAL
dan NUMBER
(bukan NUMERIC
).
Burung Api
Ada perbedaan:
- Definisi
NUMERIC
berarti presisi yang diminta. DECIMAL
akan memiliki setidaknya presisi yang diminta, namun mungkin lebih. (Namun, angka di sebelah kanan simbol desimal tetap dipertahankan.)