T-Sql Supprimer le point décimal du type de données Money

Étant donné la contrainte de n'utiliser que T-Sql dans Sql Server 2005, existe-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 idées ?

请先 登录 后评论

4 réponses

Yaakov Ellis

Multiplier par 100 puis convertir en entier.

请先 登录 后评论
Curt Hagenlocher

Pourriez-vous être un peu plus précis sur le cas d'utilisation ? Supprimer le 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 c'est le cas, vous pouvez simplifier multiplier par 100 puis arrondir avant de convertir en chaîne.

请先 登录 后评论
Lance Fisher

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

请先 登录 后评论
SQLMenace

Vous ne devriez 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

请先 登录 后评论