Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Tipe data apa yang harus saya gunakan untuk menyimpan nilai moneter?

Papucino,

Saya tidak merekomendasikan jenis uang dan uang kecil kecuali Anda yakin bahwa satu-satunya aritmatika yang Anda rencanakan adalah penjumlahan dan pengurangan. Jika Anda mungkin berurusan dengan nilai tukar, persentase, dan sebagainya, Anda berisiko mengalami masalah nyata dengan jenis ini.

Berikut ini hanya satu contoh kecil untuk menunjukkan kepada Anda perbedaan antara menggunakan uang, desimal, dan float ketika pembagian terlibat. Anda dapat menemukan contoh di mana perbedaannya jauh lebih dramatis.

declare @m1 money, @m2 money, @m3 money
declare @d1 decimal(19,4), @d2 decimal(19,4), @d3 decimal(19,4)
declare @f1 float, @f2 float, @f3 float;
set @m1 = 1.00;
set @m2 = 345.00;
set @m3 = @m1/@m2;
set @d1 = 1.00;
set @d2 = 345.00;
set @d3 = @d1/@d2;
set @f1 = 1.00;
set @f2 = 345.00;
set @f3 = @f1/@f2;
select @m3, @d3, @f3;

Hasil:0.0028 0.0029 0.00289855072463768

Tergantung pada industrinya, mungkin ada pedoman atau peraturan untuk membantu Anda memutuskan tipe data yang tepat. Tidak ada satu jawaban yang benar.

Menambahkan komentar:

Anda benar bahwa uang/uang seharusnya bukan uang, tetapi SQL Server (tidak dapat dijelaskan) menghasilkan hasil yang persis seperti itu:ketik uang dari hasil bagi dua nilai uang. Ini palsu, tetapi seperti yang Anda lihat dari contoh di bawah, itulah yang Anda dapatkan, meskipun tidak masuk akal:

declare @m1 money, @m2 money;
declare @d1 decimal(19,4), @d2 decimal(19,4);
set @m1 = 1.00;
set @m2 = 345.00;
set @d1 = 1.00;
set @d2 = 345.00;
select @m1/@m2, @d1/@d2

Hasil:0.0028 0.0028985507246376811

Hasil dengan jenis uang, 0,0028, adalah 3-4% lebih kecil dari hasil yang benar.

Tentu saja, ada banyak situasi di mana Anda perlu membagi nilai mata uang. Bahaya menggunakan jenis uang adalah bahwa hasil bagi adalah jenis yang salah (dan jawaban tidak cukup dekat dengan yang benar). Contoh pertanyaan yang memerlukan pembagian mata uang:

Misalkan Anda menukar 320 Yuan dan bank memberi Anda 47,3 dolar AS. Berapa nilai tukar yang diberikan kepada Anda?

Misalkan Anda berinvestasi $23 dan setahun kemudian nilainya $31. Berapa persen tingkat pengembalian Anda?

Kedua perhitungan ini membutuhkan pembagian nilai mata uang.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apakah ada cara untuk mendapatkan daftar semua tabel sementara saat ini di SQL Server?

  2. SQL Server - Berikan Izin Masuk untuk Akses Baca ke Semua Basis Data yang Ada dan yang Akan Datang

  3. Kehadiran IN dan OUT

  4. Pesan Dengan menggunakan parameter untuk nama kolom

  5. Keuntungan menggunakan variabel kursor di SQL Server (deklarasikan kursor @cn)