2009-02-10 19 views

cevap

3

Yardımcı olmak size yardımcı olur mu? Para Her

DECLARE @test AS money 
SET @test = 3 
SELECT CAST(@test AS int), @test 
+0

Merhaba Tina, Şimdi beklenen çıktımı aldım. teşekkürler harika .. :-) –

3

İlk ... basamak olacak şekilde içindir, paranın veri türü kullanmak asla. Herhangi bir hesaplama yaparsanız, kesilmiş sonuçlar elde edersiniz. Ne demek istediğimi görmek için aşağıdaki çalıştırın

DECLARE 
    @mon1 MONEY, 
    @mon2 MONEY, 
    @mon3 MONEY, 
    @mon4 MONEY, 
    @num1 DECIMAL(19,4), 
    @num2 DECIMAL(19,4), 
    @num3 DECIMAL(19,4), 
    @num4 DECIMAL(19,4) 

    SELECT 
    @mon1 = 100, @mon2 = 339, @mon3 = 10000, 
    @num1 = 100, @num2 = 339, @num3 = 10000 

    SET @mon4 = @mon1/@mon2*@mon3 
    SET @num4 = @num1/@num2*@num3 

    SELECT @mon4 AS moneyresult, 
    @num4 AS numericresult 

Çıktı: 2949,0000 2949,8525

Şimdi sorunuzu (o belirsiz biraz), para veri türü daima virgülden sonra iki yer vardır cevaplamak için. Kesirli parçayı istemiyorsanız veya int öğesine dönüştürüyorsanız, integer veri türünü kullanın.

Belki ondalık veya sayısal veri türünü kullanmak istersiniz?

+1

Microsoft Dynamics, para veri türünü kullanıyor. Bunu bugün gördüm. –

+2

Gerçekten çok sayıda $ 450.50 * $ 32,76 $ olmak istemek için ne kadar geçerliydi, bir süreliğine bir arada düşünürdüm, bir keresinde çoklu para değerlerini bir arada görmek istiyorum ya da onları bölüyorum. Örnek sql'nizi kullandım ve */+ kullanmak için değiştirdim ve hatta * ve/ve her biri için eşleşen değerlere sardım. –

+0

Bu yanıt hakkındaki ayrıntılı yorumlar için, [bu yanıt] 'a bakın (http://stackoverflow.com/questions/582797/should-you-choose-the-money-or-decimalx-y-datatypes-in-sql-server –

0

Bu, benim için biçimlendirici bir sorun gibi görünüyor.
SQL Server'ın para türü ile ilgili olarak 0 == 0,00

Eğer 0 C# yerine o zaman 0 göstermeye çalışıyorsanız, onu bir dizeye dönüştürmeli ve istediğiniz gibi biçimlendirmelisiniz. (Ya da keser.)

24

Normal para dönüşümleri bireysel kuruş koruyacak:

SELECT convert(varchar(30), moneyfield, 1) 

son parametre çıkış biçimi neye benzediğini karar verir:

0 (varsayılan) Hayır virgül her üç basamak için Ondalık noktasının solu ve ondalık basamağın sağındaki iki basamak; örneğin, 4235.98.

1 Ondalık noktasının solundaki her üç basamak ve ondalık hatanın sağındaki iki basamak; örneğin, 3,510,92.

2 Ondalık noktaların solunda her üç basamakta virgül ve ondalık basamağın sağında dört basamak yoktur; örneğin, 4235.9819. Eğer harcayacağınız kesecek ve size en yakın hayvan barınağına yuvarlama kullanabilirsiniz lira saymak isterseniz

, en düşük tüm sterlin veya tabandan tavana pound kadar yuvarlak:

SELECT convert(int, round(moneyfield, 0)) 
SELECT convert(int, floor(moneyfield)) 
SELECT convert(int, ceiling(moneyfield)) 
+0

Bu, tüm kuruş değerlerini atmak istediğinizde işe yarayacaktır. Bunun için cevabımı görün. –

0

görünüyor para veri türünün içsel sınırlamalarına rağmen, eğer zaten kullanıyorsanız (veya sahip olduğum şekilde miras aldınız), sorunuzun cevabı, DECIMAL kullanın.

-1

şunu kullanabilirsiniz ya

SELECT PARSENAME('$'+ Convert(varchar,Convert(money,@MoneyValue),1),2) 

veya

SELECT CurrencyNoDecimals = '$'+ LEFT(CONVERT(varchar, @MoneyValue,1),  
     LEN (CONVERT(varchar, @MoneyValue,1)) - 2) 
0

Böyle deneyebilirsiniz:

SELECT PARSENAME('$'+ Convert(varchar,Convert(money,@MoneyValue),1),2) 
0

OLARAK

CONVERT (VARCHAR (10), CONVERT (PARA, alanadı)) Ben de bu sorunu vardı ve bunun üzerine bir süre kadar takıldı. 0.00 değerini 0 olarak göstermek istedim ve aksi halde ondalık noktasını saklamak istedim. Aşağıdaki işe yaramadı: Sonuçta elde edilen sütun bir MONEY sütunu olmak zorunda kaldığından, . Bunu çözmek için, benim son hedef sütunu bir VARCHAR (30) olduğu için şu

CASE WHEN Amount= 0 THEN CONVERT(VARCHAR(30), '0', 1) ELSE CONVERT (VARCHAR(30), Amount, 1) END 

Bu önemi çalıştı ve bir miktar yerine '0' '0.00' olsaydı o sütunun tüketicilerin dışarı hata olacaktır.

İlgili konular