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

Cara Membulatkan (ATAS/BAWAH) di SQL Server – 5 Tips Berguna

Kami telah diajarkan untuk membulatkan angka sejak kami masih kecil. Ketika Anda membulatkan 1,15 ke persepuluhan terdekat, apakah itu 1,2 atau 1,1? Menggunakan fungsi SQL ROUND untuk menjawab dapat membingungkan Anda. Nanti, Anda akan mengerti apa yang saya maksud.

[sendpulse-form id="12010″]

Ini pertanyaan lain. Berapa jumlah 1+1? Itu pertanyaan yang cukup bodoh. Ini untuk anak-anak yang belajar matematika untuk pertama kalinya, bukan untuk kita orang dewasa. Tapi silakan lihat kode di bawah ini:

-- Variables for input values
DECLARE @value1 DECIMAL(3,2) = 1.05
DECLARE @value2 DECIMAL(3,2) = 1.45
DECLARE @sum1 DECIMAL(3,2) = @value1 + @value2

-- Variables for rounded values
DECLARE @roundedValue1 TINYINT = ROUND(@value1,0)
DECLARE @roundedvalue2 TINYINT = ROUND(@value2,0)
DECLARE @sum2 TINYINT = ROUND(@sum1,0)

-- Surprise!
SELECT 'sum of ' + CAST(@value1 AS VARCHAR(4)) + ' + ' + CAST(@value2 AS VARCHAR(4)) AS Q1,  @sum1 AS Sum1
SELECT 'sum of ' + CAST(@roundedValue1 AS VARCHAR(4)) + ' + ' + CAST(@roundedValue2 AS VARCHAR(4)) AS Q2,  @sum2 AS Sum2

Kemudian periksa hasilnya di bawah ini:

Apa yang terjadi di sini? Kami mendapatkan dua nilai dengan bagian desimal. Kemudian, kami membulatkannya menggunakan SQL ROUND ke bilangan bulat terdekat. Jumlah mereka juga dibulatkan. Tapi bagaimana bisa 1 + 1 menjadi 3?!

SQL pro yang jeli akan segera menemukan masalah dalam kode. Tapi pertimbangkan ini:

  • Pembulatan 2,5 ke bilangan bulat terdekat adalah 3, bukan 2.
  • Jumlah 1+1 adalah 2.

Sulit, bukan?

Inilah intinya. Jika Anda tidak hati-hati, SQL ROUND bisa membuat Anda gila. Ini juga bisa menjadi sumber argumen antara pengembang dan akuntan. Salah satunya adalah ketika berhadapan dengan prinsip materialitas. Argumennya bisa jadi jelek.

Apa yang bisa kamu lakukan?

Fungsi Bulat di SQL Server

Tidak, saya tidak menyuruh Anda untuk meneruskan masalah ini ke pengembang berikutnya. Posting ini akan memberi Anda tip klasik untuk membuat Anda dan pengguna Anda senang dengan hasilnya. Beberapa tips ini juga dapat diterapkan untuk membulatkan angka di sisi depan aplikasi atau dalam laporan.

Mari kita periksa 5 tips kami secara mendetail.

Fungsi Pembulatan Angka dalam SQL

Anda sudah tahu cara membulatkan angka dalam SQL, jadi mengapa bertanya? Ini bukan tentang bertanya bagaimana. Ini tentang menanyakan kapan. Anda dapat mengajukan pertanyaan serupa seperti di bawah ini:

  • Apakah Anda membulatkan nilai input SEBELUM melakukan perhitungan?
  • Atau, apakah Anda menghitung nilai input, lalu membulatkan hasilnya?

Lebih banyak pertanyaan dapat muncul tergantung pada perhitungan yang akan Anda buat.

Intinya adalah, apakah Anda mendapatkan standar pembulatan atau model dari pengguna. Kemudian Anda dapat menggunakan model ini untuk menulis kueri. Anda tidak berasumsi atau menebak yang akan menyebabkan perselisihan nanti. Dan jika membantu memasukkan standar ini sebagai catatan di suatu tempat dalam laporan, lakukanlah.

Bagian lain dari standar adalah berapa banyak tempat desimal yang digunakan. Bagaimana jika kolom tabel memiliki tipe data DECIMAL (10,4)? Bagaimana cara membulatkannya menjadi 2 desimal saja?

Coba kode di bawah ini:

DECLARE @value DECIMAL(10,4)

SET @value = 8346.1556

-- This will result in 8346.16 instead of 8346.1600
SELECT CAST(ROUND(@value, 2) AS DECIMAL(10,2)) 

CAST setelah ROUND hanya akan menampilkan dua tempat desimal. Dua nol akan dipotong:

Memahami Cara SQL Membulatkan ke Tempat Desimal

Di sini kami menjawab pertanyaan pertama kami. Saat Anda membulatkan 1,15 ke persepuluhan terdekat, apakah itu 1,2 atau 1,1?

Pertama, Anda memeriksanya dengan tipe data DECIMAL:

DECLARE @value DECIMAL(3,2)

SET @value = 1.15

SELECT @value
SELECT ROUND(@value, 1)  -- This will result in 1.2 or 1.20

Hasil dari kode di atas adalah 1.20 atau 1.2:

Tetapi bagaimana jika tipe datanya adalah FLOAT? Mari kita coba mengubahnya.

DECLARE @value FLOAT

SET @value = 1.15

SELECT @value
SELECT ROUND(@value, 1)  -- This will result to 1.1

Apa hasilnya? Ini 1.1. Lihat sendiri:

Bukannya saya ingin memberi Anda lebih banyak keraguan. Namun, Anda perlu mengetahui bahwa tipe data ini, meskipun keduanya digunakan untuk angka, tidak dibuat sama .

  • FLOAT dan REAL adalah perkiraan numerik, tidak disarankan untuk pembulatan – bahkan untuk pemeriksaan kesetaraan dalam klausa WHERE.
  • DECIMAL dan NUMERIC memiliki presisi dan skala yang tetap, dan kami menyebutnya sebagai angka eksak. Oleh karena itu, saat kita membulatkan 1,15 ke persepuluhan terdekat, jawaban yang benar adalah 1,2.
  • Bilangan bulat juga merupakan bilangan eksak. Mereka aman untuk pembulatan seluruh digit.

Dilema dimulai dari desain meja. Anda mungkin ingin melakukan sesuatu tentang kolom FLOAT atau REAL yang akan dibulatkan di suatu tempat.

3. Gunakan SQL ROUND pada Sumber Data yang Sama untuk Konsistensi

Asumsikan Anda perlu membuat beberapa laporan pendapatan untuk menunjukkan detail yang berbeda:ringkasan, perincian terperinci menurut jenis, dan perincian terperinci menurut sumber. Ketiga laporan ini akan memperlakukan sen atau bagian desimal sebagai tidak penting. Jadi, pembulatan nilai ke bilangan bulat tidak bisa dihindari.

Untuk hasil yang konsisten di ketiga laporan, terapkan yang berikut:

  • PILIH dari tabel dasar yang sama untuk memastikan bahwa total dari detail konsisten dengan ringkasan.
  • Gunakan model yang sama untuk pembulatan (poin #1 di atas)

Apakah Anda ingin membuat pengguna Anda puas dengan laporan pendapatan ini? Konsisten di mana dan bagaimana Anda mendapatkan nomor Anda.

4. SQL LANTAI atau langit-langit VS PUTAR

Mungkin ada kasus di mana Anda harus membulatkan ke atas atau ke bawah ke bilangan bulat berikutnya. Dalam hal ini, CEILING() atau FLOOR() adalah pilihan yang tepat daripada ROUND()

CEILING() membulatkan nilai ke bilangan bulat berikutnya:

SELECT CEILING(1);   -- returns 1 
SELECT CEILING(1.6);  -- returns 2
SELECT CEILING(1.4);  -- returns 2

Sementara itu, FLOOR() dibulatkan ke bawah:

SELECT FLOOR(1);   -- returns 1 
SELECT FLOOR(2.1); -- returns 2 
SELECT FLOOR(2.9); -- returns 2

5. Uji Hasil dengan Pengguna Anda

Setelah Anda menyelesaikan semua kueri dan desain laporan, bagian terakhir adalah memeriksa pekerjaan Anda dengan pengguna. Kita dapat membuat kesalahan tidak peduli seberapa baik kita atau seberapa keras kita bekerja. Terkadang, kami membutuhkan beberapa iterasi lagi untuk melakukannya dengan benar.

Pengguna Anda akan memiliki skenario pengujian yang akan memastikan keakuratan laporan. Atau dia mungkin memiliki file Excel yang dikerjakan secara manual untuk membandingkan pekerjaan Anda dengan pekerjaan mereka. Bagaimanapun, bekerjalah dengan mereka untuk sistem yang lebih baik. Anda akan senang melakukannya.

Kesimpulan

Bekerja dengan SQL ROUND terkadang sulit. Namun, tips yang disajikan di sini membuktikan bahwa Anda bisa menang melawan rintangan ini. Apa yang telah kamu pelajari?

  • Minta pembulatan standar atau model dari pengguna Anda.
  • Ketahui tipe data yang Anda gunakan.
  • Gunakan ROUND pada sumber data yang sama untuk konsistensi.
  • Terkadang, FLOOR atau CEILING mungkin lebih cocok daripada ROUND.
  • Terakhir, uji hasil Anda dengan pengguna Anda.

Apakah postingan ini bermanfaat? Jika itu untuk Anda, orang lain mungkin juga membutuhkannya. Silakan bagikan postingan ini ke media sosial favorit Anda.

Artikel Terkait

  1. Menghitung Total Berjalan dengan Klausa OVER dan PARTITION BY Clause di SQL Server
  2. Menghitung Median dengan Menggunakan Transact SQL


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Internal Replikasi Transaksional SQL Server

  2. Cara Mengimpor File JSON ke Tabel SQL Server

  3. Apakah ada cara untuk mengulang variabel tabel di TSQL tanpa menggunakan kursor?

  4. Melewati array int ke proc tersimpan T-SQL melalui kerangka entitas

  5. Pos Pemeriksaan Basis Data di SQL Server