Quelle est la différence entre «expression <= 1». et "expression <= 1"?

11

L'examen du code et d'une déclaration de cas a, expression <= 1.par opposition à<= 1

Je ne sais pas quel est le but de la 1.. Des pensées?

Pete Forester
la source
3
SQL Server traite le 1.littéral comme numérique (1,0) au lieu d'entier en raison de la période. Peut-être que cela a été spécifié afin de faire correspondre le type de données de l'expression (une meilleure pratique). Personnellement, je préciserais 1.0dans ce cas.
Dan Guzman
L'absence de tout 0après la virgule décimale et le fait que la decimalpriorité du type de données soit plus élevée que intla constante serait implicitement castée de toute façon si nécessaire me ferait penser qu'il s'agit probablement d'une erreur de frappe plutôt que délibérée.
Martin Smith

Réponses:

18

1.est une constante NUMERIC(ou DECIMAL), tandis que 1est une INTEGERconstante. Dans certains cas, il est utile de spécifier explicitement le type de données d'une constante pour éviter une conversion de type implicite inutile (ou indésirable).

Considérez, par exemple

create table t(f1 int);
insert into t values (2);

select 1/f1 from tRetourne ensuite 0( INTEGER), tandis que select 1./f1 from tretourne 0.5( DECIMAL).

On pourrait supposer que sur le côté gauche de la comparaison dans votre exemple, il y a une DECIMALcolonne, et la spécification explicite d'une DECIMALconstante pourrait améliorer légèrement les performances en évitant une conversion de type implicite.

mustaccio
la source