Domanda

Dato il vincolo di utilizzare solo T-Sql in Sql Server 2005, esiste un modo migliore per rimuovere il punto decimale da un tipo di dati money rispetto a una conversione in un varchar (qui implicitamente) e quindi una sostituzione del punto decimale?

Ecco cosa ho attualmente.

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

Che restituisce il desiderato 123 e 1999, ma mi chiedevo se esistesse un modo migliore.qualche idea?

È stato utile?

Soluzione

Moltiplicare per 100 e poi convertire in un numero intero.

Altri suggerimenti

Non dovresti mai e poi mai utilizzare il tipo di dati money per memorizzare valori monetari.Se esegui qualche calcolo otterrai risultati troncati.Esegui quanto segue per vedere cosa intendo

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

Produzione:2949.0000 2949.8525

Potresti essere un po' più specifico riguardo al caso d'uso?Rimuovere il punto decimale dalla rappresentazione è un po' insolito dato che perderai tutte le informazioni sulla scala.Stai assumendo che ci saranno sempre due cifre?Se è così, potresti semplificare moltiplicando per 100 e poi arrotondando prima di convertirlo in una stringa.

Tieni presente che il tipo di dati money può contenere fino a 4 cifre dopo il decimale.I valori con più di due cifre potrebbero non funzionare come previsto né per la soluzione originale né per il trucco x100.

Ecco la magia:

DataFormatString="{0:c0}

Ciò rimuoverà le cifre decimali.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top