¿Cuál es la diferencia entre "expresión <= 1". y "expresión <= 1"?

11

Revisar el código y una declaración de caso tiene expression <= 1.como opuesto a<= 1

No estoy seguro de cuál es el propósito de la 1.. ¿Alguna idea?

Pete Forester
fuente
3
SQL Server trata el 1.literal como numérico (1,0) en lugar de entero debido al punto. Tal vez eso se especificó para que coincida con el tipo de datos de la expresión (una práctica recomendada). Personalmente, especificaría 1.0en ese caso.
Dan Guzman
La falta de alguno 0después del punto decimal y el hecho de que decimaltenga una mayor precedencia de tipo de datos que intla constante se emitiría implícitamente de todos modos si fuera necesario me haría pensar que es probable que sea un error de escritura en lugar de deliberado.
Martin Smith

Respuestas:

18

1.es una NUMERIC(o DECIMAL) constante, mientras que 1es una INTEGERconstante. En algunos casos es útil especificar el tipo de datos de una constante explícitamente para evitar una conversión de tipo implícita innecesaria (o indeseable).

Considere, por ejemplo

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

Luego select 1/f1 from tdevuelve 0( INTEGER), mientras que select 1./f1 from tdevuelve 0.5( DECIMAL).

Se podría suponer que en el lado izquierdo de la comparación en su ejemplo hay una DECIMALcolumna, y especificar explícitamente una DECIMALconstante podría mejorar marginalmente el rendimiento al evitar una conversión de tipo implícita.

mustaccio
fuente