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?
Multiplicați cu 100 și apoi convertiți la un int.
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.
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.
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