Tulis angka dengan dua tempat desimal SQL server


Jawaban:


213

coba ini

SELECT CONVERT(DECIMAL(10,2),YOURCOLUMN)

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.


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


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


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


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

7

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

ROUND(column_name,decimals)

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

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

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;
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.