T-Sql Rimuovere Il Punto Decimale Dal Tipo Di Dati Money

Dato il vincolo di utilizzare soltanto le T-Sql in Sql Server 2005, c’è un modo migliore per rimuovere il punto decimale da un denaro il tipo di dati di una conversione di un tipo di dati varchar (qui implicitamente) e poi un replace della virgola decimale?

Qui è quello che ho attualmente.

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

Che restituisce il desiderato 123 e il 1999, ma mi chiedevo se c’era un modo migliore. Ogni pensiero?

InformationsquelleAutor Pete | 2008-08-06

 

5 Replies
  1. 3

    Si dovrebbe mai utilizzare il denaro tipo di dati per memorizzare i valori monetari. Se si fanno i calcoli si ottengono risultati troncati. Eseguire le operazioni seguenti per vedere che cosa voglio dire

    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

    Di uscita:
    2949.0000 2949.8525

  2. 0

    Potrebbe essere un po più specifico riguardo al caso di utilizzo? Rimozione del punto decimale dalla rappresentazione è un po ‘ strano visto che tu perda tutte le informazioni su la scala. Stai supponendo che ci saranno sempre due cifre? Se è così, si potrebbe semplificare moltiplicare per 100 e poi giro prima la conversione di una stringa.

  3. 0

    Tenere a mente che i soldi del tipo di dati può avere fino a 4 cifre passato decimale. Valori con più di due cifre potrebbero non funzionare come previsto sia per la tua soluzione originale o la x100 trucco.

  4. 0

    Ecco la magia:

    DataFormatString="{0:c0}

    Questo rimuoverà le cifre decimali.

    • Il vincolo originale era che potevano essere in T-Sql. DataFormatString è una .Net cosa.

Lascia un commento