Ada dua tipe data berbeda yang memungkinkan kita menyimpan data numerik yang tepat dalam SQL: NUMERICdan DECIMAL.

Pada artikel kali ini saya akan menjelaskan perbedaan dan persamaan jenis-jenis tersebut. Ikuti saja.

1. Perkenalan

Baik NUMERICdan DECIMALmenyimpan bilangan desimal dan menggunakan aritmatika eksak — bukan bilangan floating point (REAL, FLOAT, dll.), yang menyimpan bilangan biner dan menggunakan aritmatika tidak eksak. Jadi, DECIMALatau NUMERICharus 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 NUMERICtype 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 untuk NUMERIC.

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, NUMERICtype 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.)