230 votes

Comment obtenir un résultat flottant en divisant deux valeurs entières en utilisant T-SQL ?

En utilisant T-SQL et Microsoft SQL Server, j'aimerais spécifier le nombre de chiffres décimaux lorsque je fais une division entre 2 nombres entiers, par exemple :

select 1/3

Cela renvoie actuellement 0 . Je voudrais qu'il revienne 0,33 .

Quelque chose comme :

select round(1/3, -2)

Mais ça ne marche pas. Comment puis-je obtenir le résultat souhaité ?

354voto

Richard Points 8614

Les suggestions de stb et xiowl sont très bien si vous cherchez une constante. Si vous devez utiliser des champs ou des paramètres existants qui sont des entiers, vous pouvez d'abord les convertir en flottants :

SELECT CAST(1 AS float) / CAST(3 AS float)

ou

SELECT CAST(MyIntField1 AS float) / CAST(MyIntField2 AS float)

84voto

xiaowl Points 2342

Parce que le serveur SQL effectue des divisions entières. Essayez ceci :

select 1 * 1.0 / 3

Ceci est utile lorsque vous passez des entiers comme paramètres.

select x * 1.0 / y

56voto

M.S. Points 3293

Il n'est pas nécessaire de les lancer tous les deux. Le type de données de résultat pour une division est toujours celui qui a la valeur la plus élevée. la préséance des types de données . La solution doit donc être :

SELECT CAST(1 AS float) / 3

ou

SELECT 1 / CAST(3 AS float)

31voto

stb Points 883

Utiliser

select 1/3.0

Cela fera l'affaire.

16voto

Supreme Dolphin Points 1330

Je comprends que CAST pour FLOAT n'est pas autorisé par MySQL et provoquera une erreur lorsque vous tenterez de CAST(1 AS float) comme indiqué à MySQL dev .

La solution à ce problème est simple. Il suffit de faire

(1 + 0.0)

Ensuite, utilisez ROUND pour obtenir un nombre spécifique de décimales comme

ROUND((1+0.0)/(2+0.0), 3)

Le SQL ci-dessus divise 1 par 2 et renvoie un flottant à 3 décimales, comme dans il serait 0.500 .

On peut CAST aux types suivants : binaire, char, date, datetime, décimal, json, nchar, signé, heure, et non signé .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X