J'ai un type de données d'argent dans SQL Server. Comment reformater 0.00 à 0 dans ma requête?
Les conversions normales d'argent préservent des sous en particulier:
SELECT convert(varchar(30), moneyfield, 1)
Le dernier paramètre décide à quoi ressemble le format de sortie:
0 (par défaut) Pas de virgule tous les trois chiffres à gauche du séparateur décimal et deux chiffres à droite du séparateur décimal; par exemple, 4235.98.
1 virgule tous les trois chiffres à gauche de la virgule et deux chiffres à droite de la virgule; par exemple, 3 510,92.
2 Pas de virgule tous les trois chiffres à gauche du point décimal et quatre chiffres à droite du point décimal; par exemple, 4235.9819.
Si vous souhaitez tronquer les sous et compter en livres, vous pouvez arrondir à la livre la plus proche, sol à la livre la plus basse ou plafonner pour arrondir les livres:
SELECT convert(int, round(moneyfield, 0))
SELECT convert(int, floor(moneyfield))
SELECT convert(int, ceiling(moneyfield))
Est-ce que le couler pour vous aider? L'argent est censé avoir les décimales ...
DECLARE @test AS money
SET @test = 3
SELECT CAST(@test AS int), @test
Tout d'abord, vous ne devriez jamais utiliser le type de données money. Si vous effectuez 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
Maintenant, pour répondre à votre question (elle était un peu vague), le type de données money a toujours deux places après le point décimal. Utilisez le type de données entier si vous ne voulez pas la partie fractionnaire ou si vous ne convertissez pas en int.
Peut-être souhaitez-vous utiliser le type de données décimal ou numérique?
J'ai trouvé cette approche directe et utile.
CONVERT (VARCHAR (10), CONVERT (MONEY, nom du champ)) AS PRICE
Il semble que malgré les limitations intrinsèques du type de données money, si vous l'utilisez déjà (ou si vous en avez hérité comme je l'ai), la réponse à votre question est, utilisez DECIMAL.
Vous pouvez essayer comme ça:
SELECT PARSENAME('$'+ Convert(varchar,Convert(money,@MoneyValue),1),2)
Cela ressemble à un problème de formatage pour moi.
En ce qui concerne le type d’argent de SQL Server, 0 == 0.00
Si vous essayez d'afficher 0 dans say c # plutôt que 0,00, vous devez le convertir en chaîne et le formater à votre guise. (ou le tronquer.)
J'ai eu ce problème aussi, et j'ai trébuché pendant un moment dessus. Je voulais afficher 0,00 comme 0 et sinon conserver le point décimal. Les éléments suivants n'ont pas fonctionné:
CASE WHEN Amount= 0 THEN CONVERT(VARCHAR(30), Amount, 1) ELSE Amount END
Parce que la colonne résultante a été forcée d'être une colonne d'ARGENT. Pour résoudre ce problème, les éléments suivants ont fonctionné
CASE WHEN Amount= 0 THEN CONVERT(VARCHAR(30), '0', 1) ELSE CONVERT (VARCHAR(30), Amount, 1) END
Cela importait parce que ma colonne de destination finale était un VARCHAR (30) et que les utilisateurs de cette colonne se tromperaient si un montant était "0,00" au lieu de "0".