T-Sql Supprimer Le Point Décimal De L'Argent De Type De Données
-
08-06-2019 - |
Question
Compte tenu de la contrainte de uniquement à l'aide de T-Sql dans Sql Server 2005, est-il une meilleure façon de supprimer le point décimal de l'argent de type de données que d'une conversion à une varchar (ici implicitement) et puis un remplacement de la virgule?
Voici ce que j'ai actuellement.
SELECT REPLACE(1.23, '.', ''), REPLACE(19.99, '.', '')
Qui renvoie le désiré 123 et 1999, mais je me demandais si il y avait une meilleure façon.Toutes les pensées?
La solution
Multipliez par 100 et ensuite de les convertir vers un int.
Autres conseils
Vous ne devriez jamais jamais utiliser l'argent de type de données pour stocker des valeurs monétaires.Si vous faites les calculs, vous obtiendrez des résultats tronqués.Exécutez les opérations suivantes pour voir ce que je veux 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
Sortie:2949.0000 2949.8525
Pourriez-vous être un peu plus précis sur les cas d'utilisation?Suppression de la virgule décimale à partir de la représentation est un peu inhabituel étant donné que vous perdrez toutes les informations au sujet de l'échelle.Êtes-vous en supposant qu'il y aura toujours deux chiffres?Si oui, vous pouvez simplifier multipliez par 100 et ensuite le tour avant de se convertir à une chaîne.
Gardez à l'esprit que le type de données monétaire peut avoir jusqu'à 4 chiffres après la virgule.Valeurs avec plus de deux chiffres peut ne pas fonctionner comme prévu, soit l'original de votre solution ou le x100 truc.
Ici, c'est la magie:
DataFormatString="{0:c0}
Cela permettra de supprimer les décimales.