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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top