Bagaimana cara mendapatkan hasil float dengan membagi dua nilai integer menggunakan T-SQL?


173

Menggunakan T-SQL dan Microsoft SQL Server saya ingin menentukan jumlah angka desimal ketika saya melakukan pembagian antara 2 angka integer seperti:

select 1/3

Itu saat ini kembali 0. Saya ingin kembali 0,33.

Sesuatu seperti:

select round(1/3, -2)

Tapi itu tidak berhasil. Bagaimana saya bisa mencapai hasil yang diinginkan?


3
Sudahkah Anda mencoba 1.0 / 3?
Thilo

Jawaban yang saya dapat lebih dari cukup
LaBracca

Jawaban:


277

Saran dari stb dan xiowl baik-baik saja jika Anda mencari konstanta. Jika Anda perlu menggunakan bidang atau parameter yang ada yang merupakan bilangan bulat, Anda dapat menjadikannya sebagai float terlebih dahulu:

SELECT CAST(1 AS float) / CAST(3 AS float)

atau

SELECT CAST(MyIntField1 AS float) / CAST(MyIntField2 AS float)

Atau Anda dapat menggunakan mereka sebagai desimal, jika Anda menginginkan hasil desimal.
Tim

30
PILIH 1.0 * MyInt1 / MyInt2
Troglo

@TroubleZero untuk penggunaan MySQLdecimal
itsazzad

terima kasih banyak, kamu menyelamatkan hariku. Saya telah mencoba CAST (7/3 AS mengapung) tetapi kembali 2 lagi. Jadi nomor casting memecahkan masalah saya.
Yasin Yörük

3
tidak perlu memberikan dividen dan pembagi, lihat jawaban @MS ' stackoverflow.com/a/30639343/2866644
robotik

70

Karena SQL Server melakukan pembagian integer. Coba ini:

select 1 * 1.0 / 3

Ini membantu ketika Anda melewatkan bilangan bulat sebagai params.

select x * 1.0 / y

1
Anda bahkan dapat meninggalkan nol.
John

43

Tidak perlu membuang keduanya. Jenis data hasil untuk divisi selalu yang dengan tipe data yang lebih tinggi diutamakan . Jadi solusinya harus:

SELECT CAST(1 AS float) / 3

atau

SELECT 1 / CAST(3 AS float)

27

menggunakan

select 1/3.0

Ini akan melakukan pekerjaan.


13

Saya mengerti bahwa CASTuntuk FLOATtidak diizinkan di MySQL dan akan memunculkan kesalahan saat Anda berusaha CAST(1 AS float)sebagaimana dinyatakan di MySQL dev .

Solusi untuk ini adalah sederhana. Kerjakan saja

(1 + 0.0)

Kemudian gunakan ROUNDuntuk mencapai jumlah desimal tertentu seperti

ROUND((1+0.0)/(2+0.0), 3)

SQL di atas membagi 1 dengan 2 dan mengembalikan float ke 3 tempat desimal, seperti di dalamnya 0.500.

Satu dapat CASTke jenis berikut: biner, char, tanggal, datetime, desimal, json, nchar, ditandatangani, waktu, dan unsigned .


3
MySQL memang mengizinkan CAST, hanya saja tidak mengizinkan casting untuk FLOAT. Gunakan DECIMALsebagai gantinya. Lihat misalnya stackoverflow.com/questions/7368163/… .
markusk

7

Sepertinya trik ini berfungsi di SQL Server dan lebih pendek (berdasarkan jawaban sebelumnya)

SELECT 1.0*MyInt1/MyInt2

Atau:

SELECT (1.0*MyInt1)/MyInt2

2
Saya paling suka ini, bahkan terlihat bagus untuk perhitungan persentase:SELECT 100.0 * @Elapsed / @Total
EliSherer

3

Gunakan ini

select cast((1*1.00)/3 AS DECIMAL(16,2)) as Result

Di sini, di sql ini pertama kali dikonversi menjadi float atau dikalikan dengan 1.00. Output yang akan menjadi angka float. Di sini saya mempertimbangkan 2 tempat desimal. Anda dapat memilih apa yang Anda butuhkan.


2

Jika Anda datang ke sini (sama seperti saya) untuk menemukan solusi untuk nilai integer , inilah jawabannya:

CAST(9/2 AS UNSIGNED)

mengembalikan 5

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.