Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server
MS SQL-Server Forum Microsoft SQL-Server. Avant de poster -> FAQ SQL-Server, Tutoriels SQL-Server
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/11/2010, 11h26   #1
Candidat au titre de Membre du Club
 
Inscription : février 2004
Messages : 61
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 61
Points : 13
Points : 13
Par défaut Quelqu'un peut m'expliquer ROUND

SELECT ROUND(0.66, 0)
Arithmetic overflow exception
SELECT 1.0 * ROUND(0.66, 0) = 1;

Est-ce normal cela???
SqlServer 2005
__________________
Cosotech Informatique
Pascal Wick
Programmeur-Analyste Sr.
pascalwick est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2010, 11h51   #2
Expert Confirmé Sénior
 
Homme François
Chef de projet NTIC
Inscription : janvier 2007
Messages : 5 354
Détails du profil
Informations personnelles :
Nom : Homme François
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Chef de projet NTIC

Informations forums :
Inscription : janvier 2007
Messages : 5 354
Points : 9 745
Points : 9 745
C'est vrai que c'est amusant.

Car si on fait

Code :
1
2
 
PRINT ROUND(0.66, 0)
Ca marche, de même que :

Code :
1
2
 
SELECT CAST(ROUND(0.66, 0) AS decimal)
__________________

Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


Une réponse vous a aidé ? utiliser le bouton

"L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel
Bluedeep est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2010, 11h57   #3
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 937
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 937
Points : 17 745
Points : 17 745
Normal ! Lorsque vous ne précisez pas le type de données comme c'est le cas de 0.66, SQL Server le transtype dans le type le plus juste et dans votre cas, c'est un NUMERIC(2,2).

le code que vous donnez revient donc à faire :

Code :
SELECT ROUND(CAST(0.66 AS NUMERIC(2,2)), 0)
Ce qui immanquablement provoque une erreur de dépassement car arrondir 0.66 sans décimale revient à 1 et 1 hne peut pas tenir dans un NUMERIC(2,2), mais dans un NUMERIC(3,2) !!!

Code :
SELECT ROUND(CAST(0.66 AS NUMERIC(3,2)), 0)
Les jeunes développeurs oublient toujours que SQL est un langage typé !
Donc, mettre le bon type de données !!!

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h29.


 
 
 
 
Partenaires

Hébergement Web