İki ondalık basamaklı bir sayı yazın SQL sunucusu


Yanıtlar:


213

bunu dene

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

2
Eğer 10 yıl önce bu cevap buysa, artık değil. Bu yöntem 10.11111'i 10.00'a çevirecektir.
Jonathon Cowley-Thom

Ben (ONDALIK (10,2), 10,11111) o Sql Server 2008 R2 oldu ( '10,11111', Ondalık (10,2)) SEÇ CONVERT için 10.11 aynı sonucu döndürdü SEÇ CONVERT çalıştı
SKCS Kamal

70

Str()İşlev kullanın . Üç argüman alır (sayı, görüntülenecek toplam karakter sayısı ve görüntülenecek ondalık basamak sayısı)

  Select Str(12345.6789, 12, 3)

görüntüler: '12345.679' (3 boşluk, 5 basamak 12345, ondalık nokta ve üç ondalık basamak (679). - kısalması gerekiyorsa yuvarlar (tam sayı kısmı toplam boyut için çok büyük değilse, bu durumda yerine yıldız işaretleri görüntülenir.)

Toplam 12 karakter, 3 ondalık ayırıcının sağında.


1
it rounds if it has to truncate... tamsayı kısmı toplam boyut için çok büyük değilse, bu durumda yıldız işaretleri görüntülenir. Bu, dokümantasyondaSTR belirtilmiştir . İşte bu sayfadan bir alıntı:STR(1223,2) truncates the result set to **.
Mark Byers

36

Genellikle SQL'de bir sayının kesinliğini parametrelerle tanımlayarak tanımlayabilirsiniz. Çoğu durumda, bu bir sütunu 2 hassasiyetle (ondalık basamak) toplam 10 basamaklı bir Sayı olarak tanımlar NUMERIC(10,2)veya Decimal(10,2)- olarak tanımlayacaktır.

Anlaşılır olması için düzenlendi


4
Ayrıca DECIMAL (10, 2) olarak da ilan edilebilir.
jrcs3

10
Bu birkaç nedenden dolayı yanlıştır. Sayı değil, sayısal veya ondalık. Sayısal (10,2) ifadesinin ondalık noktadan önce 10 yere izin verdiğini söylüyorsunuz, bu da yanlış. sayısal (10,2), ondalık basamaktan sonra 2 basamaklı 10 toplam basamağa izin verir. Aralık = -99999999,99 ila 99999999,99
George Mastros

@G Mastros: Görünüşe göre tam hassasiyet noktasındasınız. Kuralın asıl isimlendirilmesinde, SQL uygulamalarının çoğunda NUMBER geçerli bir türdür. Her ne kadar sqlserver
AAA

@GMastros da aynı şeyi söylemeye geldi. msdn.microsoft.com/tr-tr/library/aa258832%28v=sql.80%29.aspx
Joe

19

Bu iş benim için ve her zaman iki basamak kesir tutar

23.1 ==> 23.10

25.569 ==> 25.56

1 ==> 1.00

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

Kod ekran görüntüsü


2
yukarıdaki Charles Bretana'dan STR () işlevini deneyin. Formülünüz gibi çalışır, ancak 25.569 örneğinizde yuvarlama yapar.
JerryOL

15

Çocuklar bugün böyle yapıyor:

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

123,46


1
FORMAT işlevi 2012 sürümünden itibaren kullanılabilir.
user1263981

veya: SELECT FORMAT (@test, '. ##')
java-love

Veri girişi olsaydı: DECLARE @test DECIMAL(18,6) = 0.456789 o zaman SELECT FORMAT(@test, '##.##')döner: .46 Bunu nasıl lider sıfır göstermek için alabilirim: 0.46?
luisdev


14

Sadece iki ondalık basamağa ihtiyacınız varsa, en basit yol ..

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

VEYA

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

Çıktı

12.00

7

Numarayı kısaltmak yerine yuvarlama konusunda sorun yaşıyorsanız , sadece:

ROUND(column_name,decimals)

2

Bunu dene:

 declare @MyFloatVal float;

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

    select  @MyFloatVal

    Convert(decimal(18,2),r.AdditionAmount) as AdditionAmount

0

Eklemek istediğiniz değeri (ör. 2.99) 100 ile çarpın

Sonra sonuca 100 ekleyerek bölümü sonuna 0,01 ekleyin:

299.01/100

0

Bu, ondalık basamaktan sonra 2 değer içeren toplam 10 basamağa izin verir. Bu, ondalık basamağa kadar değer değerini 8 basamağa kadar ve ondalık basamağa 2 kadar kaldırabileceği anlamına gelir.

Doğrulamak için değeri aşağıdaki sorguya girin.

DECLARE vtest  number(10,2);
BEGIN
SELECT 10.008 INTO vtest FROM dual;
dbms_output.put_line(vtest);
END;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.