serveur SQL - T-Sql supprimer le point décimal du type de données Money

Translate

Étant donné la contrainte de n'utiliser que T-Sql dans Sql Server 2005, y a-t-il un meilleur moyen de supprimer le point décimal d'un type de données money qu'une conversion en varchar (ici implicitement) puis un remplacement du point décimal?

Voici ce que j'ai actuellement.

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

Ce qui renvoie les 123 et 1999 souhaités, mais je me demandais s'il y avait un meilleur moyen. Des pensées?

This question and all comments follow the "Attribution Required."

Toutes les réponses

Translate

Multipliez par 100 puis convertissez en un entier.

La source
Translate

Vous ne devez jamais utiliser le type de données money pour stocker des valeurs monétaires. Si vous faites des calculs, vous obtiendrez des résultats tronqués. Exécutez ce qui suit 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

La source
Translate

Pourriez-vous être un peu plus précis sur le cas d'utilisation? La suppression du point décimal de la représentation est un peu inhabituel étant donné que vous perdrez toutes les informations sur l'échelle. Supposez-vous qu'il y aura toujours deux chiffres? Si tel est le cas, vous pouvez simplifier multiplier par 100 puis arrondir avant de convertir en chaîne.

La source
Translate

Gardez à l'esprit que le type de données Money peut avoir jusqu'à 4 chiffres après la virgule. Les valeurs avec plus de deux chiffres peuvent ne pas fonctionner comme prévu pour votre solution d'origine ou l'astuce x100.

La source
Nathan Lee
Translate

Voici la magie:

DataFormatString="{0:c0}

Cela supprimera les décimales.

La source