T-Sql elimina punctul zecimal din tipul de date de bani

Având în vedere constrângerea folosirii T-Sql numai în Sql Server 2005, există o modalitate mai bună de a elimina zecimale dintr-un tip de bani decât o conversie la un varchar (aici implicit) și apoi o înlocuire a punctului zecimal?

Iată ce am în prezent.

SELECT REPLACE(1.23, '.', ''), REPLACE(19.99, '.', '')

Ceea ce readuce dorințele 123 și 1999, dar mă întrebam dacă există o cale mai bună. Orice gânduri?

0
fr hi bn

4 răspunsuri

Multiplicați cu 100 și apoi convertiți la un int.

0
adăugat

Rețineți că tipul de date de bani poate avea până la 4 cifre dincolo de zecimale. Valorile cu mai mult de două cifre ar putea să nu funcționeze conform așteptărilor pentru soluția originală sau pentru trucul x100.

0
adăugat

Niciodată nu ar trebui să utilizați tipul dat de bani pentru a stoca valorile monetare. Dacă faceți orice calcule, veți obține rezultate trunchiate. Rulați următoarele pentru a vedea ce vreau să spun

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

ieşire: 2949.0000 2949.8525

0
adăugat

Ați putea fi ceva mai specific cu privire la cazul de utilizare? Eliminarea punctului zecimal din reprezentare este puțin neobișnuită, dat fiind că veți pierde toate informațiile despre scală. Presupunem că vor exista întotdeauna două cifre? Dacă da, puteți simplifica multiplicarea cu 100 și apoi rotunjirea înainte de a trece la un șir.

0
adăugat