Tulis angka dengan dua tempat desimal SQL server

Jawaban:

213

coba ini

SELECT CONVERT(DECIMAL(10,2),YOURCOLUMN)
Chanoch
sumber
2
Jika ini jawabannya 10 tahun yang lalu, itu tidak lagi. Metode ini akan mengubah 10.11111 menjadi 10.00.
Jonathon Cowley-Thom
Saya mencoba SELECT CONVERT (DECIMAL (10,2), 10.11111) mengembalikan 10.11 hasil yang sama untuk SELECT CONVERT (DECIMAL (10,2), '10.11111') di Sql Server 2008 R2
SKCS Kamal
70

Gunakan Str()Function. Dibutuhkan tiga argumen (jumlah, jumlah total karakter untuk ditampilkan, dan jumlah tempat desimal untuk ditampilkan)

  Select Str(12345.6789, 12, 3)

menampilkan: '12345.679' (3 spasi, 5 digit 12345, titik desimal, dan tiga angka desimal (679) - bulat jika harus dipotong, (kecuali jika bagian bilangan bulat terlalu besar untuk ukuran total, dalam hal ini tanda bintang ditampilkan sebagai gantinya.)

untuk Total 12 karakter, dengan 3 di sebelah kanan titik desimal.

Charles Bretana
sumber
1
it rounds if it has to truncate... kecuali bagian integer terlalu besar untuk ukuran total, dalam hal ini tanda bintang ditampilkan sebagai gantinya. Ini disebutkan dalam dokumentasi untukSTR . Berikut kutipan dari halaman itu:STR(1223,2) truncates the result set to **.
Mark Byers
36

Secara umum Anda dapat menentukan ketepatan angka dalam SQL dengan mendefinisikannya dengan parameter. Untuk sebagian besar kasus, ini akan NUMERIC(10,2)atau Decimal(10,2)- akan menentukan kolom sebagai Angka dengan 10 digit total dengan ketelitian 2 (tempat desimal).

Diedit untuk kejelasan

AAA
sumber
4
Itu juga dapat dinyatakan sebagai DECIMAL (10, 2).
jrcs3
10
Ini salah karena beberapa alasan. Ini bukan angka, angka atau desimal. Anda mengatakan angka (10,2) memungkinkan 10 tempat sebelum titik desimal, yang juga salah. numerik (10,2) memungkinkan untuk 10 digit total dengan 2 tempat setelah titik desimal. Kisaran = -99999999,99 hingga 99999999,99
George
@G Mastros: Tampaknya Anda tepat di titik presisi. Pada penamaan konvensi yang sebenarnya, dalam banyak implementasi SQL NUMBER adalah tipe yang valid. Meskipun saya akan mengaku tidak mengetahui kasus sqlserver
AAA
@ GMastros datang untuk mengatakan hal yang sama. msdn.microsoft.com/en-us/library/aa258832%28v=sql.80%29.aspx
Joe
19

Ini bekerja untuk saya dan selalu menyimpan dua digit pecahan

23.1 ==> 23.10

25.569 ==> 25.56

1 ==> 1,00

Cast(CONVERT(DECIMAL(10,2),Value1) as nvarchar) AS Value2

Tangkapan layar kode

Mohamed Ramadhan
sumber
2
coba fungsi STR () dari Charles Bretana di atas. Ini bekerja seperti rumus Anda tetapi akan melakukan pembulatan pada contoh 25,569 Anda.
JerryOL
15

Beginilah cara anak-anak melakukannya hari ini:

DECLARE @test DECIMAL(18,6) = 123.456789
SELECT FORMAT(@test, '##.##')

123.46

ClubbieTim
sumber
1
Fungsi FORMAT tersedia dari versi 2012 dan seterusnya.
user1263981
atau: SELECT FORMAT (@test, '. ##')
java-love
Jika data masukan adalah: DECLARE @test DECIMAL(18,6) = 0.456789 kemudian SELECT FORMAT(@test, '##.##')kembali: .46 Bagaimana Anda mendapatkannya untuk menunjukkan angka nol: 0.46?
luisdev
Untuk mendapatkan 0 yang terkemuka, coba SELECT FORMAT (@test, '# 0. ##')
ClubbieTim
14

Jika Anda hanya membutuhkan dua tempat desimal, cara paling sederhana adalah ..

SELECT CAST(12 AS DECIMAL(16,2))

ATAU

SELECT CAST('12' AS DECIMAL(16,2))

Keluaran

12.00
SonalPM
sumber
7

Jika Anda baik-baik saja dengan membulatkan angka alih-alih memotongnya, maka itu hanya:

ROUND(column_name,decimals)
antoine
sumber
2

Coba ini:

 declare @MyFloatVal float;

    set @MyFloatVal=(select convert(decimal(10, 2), 10.254000))

    select  @MyFloatVal

    Convert(decimal(18,2),r.AdditionAmount) as AdditionAmount
Anil Chaudhary
sumber
0

Lipat gandakan nilai yang ingin Anda masukkan (mis. 2.99) dengan 100

Kemudian masukkan pembagian dengan 100 hasil menambahkan 0,01 di akhir:

299.01/100
SQL Master
sumber
0

Ini akan memungkinkan total 10 digit dengan 2 nilai setelah desimal. Ini berarti dapat mengakomodasi nilai nilai sebelum desimal hingga 8 digit dan 2 setelah desimal.

Untuk memvalidasi, masukkan nilai dalam kueri berikut.

DECLARE vtest  number(10,2);
BEGIN
SELECT 10.008 INTO vtest FROM dual;
dbms_output.put_line(vtest);
END;
kumar vishwash
sumber