En SQL, j'ai col1
Et col2
. Les deux sont des entiers.
Je veux faire comme:
select col1/col2 from tbl1
Je reçois le résultat 1
Où col1=3
Et col2=2
Le résultat que je veux est 1.1
Je mets round(col1/col2,2)
. Le résultat est toujours 1.
Je mets decimal(col1/col2,2)
. La décimale n'est pas intégrée à la fonction.
Comment puis-je faire exactement pour obtenir 1.1?
Vous devrez convertir ou convertir les valeurs en valeurs décimales avant la division. Jetez un oeil à ceci http://msdn.Microsoft.com/en-us/library/aa226054.aspx
Par exemple
DECLARE @num1 int = 3 DECLARE @num2 int = 2
SELECT @num1/@num2
SELECT @num1/CONVERT(decimal(4,2), @num2)
Le premier SELECT produira ce que vous verrez tandis que le second SELECT aura la bonne réponse 1.500000
Juste une autre approche:
SELECT col1 * 1.0 / col2 FROM tbl1
Multiplier par 1,0 transforme un entier en un float numeric (13,1) et fonctionne donc comme un transtypage, mais le plus probablement est plus lent que cela.
Une variation légèrement plus courte suggérée par Aleksandr Fedorenko dans un commentaire:
SELECT col1 * 1. / col2 FROM tbl1
L'effet serait fondamentalement le même. La seule différence est que le résultat de la multiplication dans ce cas serait numérique (12,0) .
Principal avantage: moins verbeux que les autres approches.
SELECT CAST (col1 as float) / col2 FROM tbl1
Un casting devrait fonctionner. ("Moins est plus.")
Renvoie le type de données de l'argument ayant la priorité la plus élevée. Pour plus d'informations sur la priorité des types de données, consultez Precedence des types de données (Transact-SQL) .
Si un dividende entier est divisé par un diviseur entier , le résultat est un entier dont la partie fractionnaire du résultat est tronquée
Il peut y avoir d'autres moyens d'obtenir le résultat souhaité.
Declare @a int
Declare @b int
SET @a = 3
SET @b=2
SELECT cast((cast(@a as float)/ cast(@b as float)) as float)