Je voudrais spécifier le nombre de chiffres décimaux lorsque je divise en 2 nombres entiers comme:
select 1/3
Cela renvoie actuellement 0
. Je voudrais qu'il retourne 0,33
.
Quelque chose comme:
select round(1/3, -2)
Mais ça ne marche pas. Comment puis-je atteindre le résultat souhaité?
Les suggestions de stb et xiowl sont acceptables si vous recherchez une constante. Si vous devez utiliser des champs existants ou des paramètres qui sont des entiers, vous pouvez les convertir en flottants:
SELECT CAST(1 AS float) / CAST(3 AS float)
ou
SELECT CAST(MyIntField1 AS float) / CAST(MyIntField2 AS float)
Parce que SQL Server effectue une division entière. Essaye ça:
select 1 * 1.0 / 3
Ceci est utile lorsque vous passez des entiers en tant que paramètres.
select x * 1.0 / y
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 avec le plus haut priorité du type de données . La solution doit donc être:
SELECT CAST(1 AS float) / 3
ou
SELECT 1 / CAST(3 AS float)
utilisation
select 1/3.0
Cela fera le travail.
Peut-être un peu tard, mais sachez que CAST
ing to FLOAT
n'est pas autorisé dans MySQL et générera 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 code SQL ci-dessus divise 1 par 2 et renvoie un nombre à 3 décimales, comme dans 0.500
.
On peut CAST
aux types suivants: binaire, caractère, date, date/heure, décimal, json, nchar, signé, heure, et unsigned .
On dirait que cette astuce fonctionne dans SQL Server et est plus courte (basée sur les réponses précédentes)
SELECT 1.0*MyInt1/MyInt2
Ou:
SELECT (1.0*MyInt1)/MyInt2
select cast((1*1.00)/3 AS DECIMAL(16,2)) as Result
Ici, dans ce premier sql converti d'abord pour float ou multiplie par 1,00 .Quelle sortie sera un nombre float. Ici, je considère 2 décimales. Vous pouvez choisir ce dont vous avez besoin.
Si vous êtes venu ici (comme moi) pour trouver la solution pour valeur entière, voici la réponse:
CAST(9/2 AS UNSIGNED)
renvoie 5