Was ist der Unterschied zwischen "Ausdruck <= 1"? und "Ausdruck <= 1"?

11

Das Überprüfen von Code und einer case-Anweisung hat expression <= 1.im Gegensatz zu<= 1

Ich bin mir nicht sicher, was der Zweck des 1.ist. Irgendwelche Gedanken?

Pete Forester
quelle
3
SQL Server behandelt das 1.Literal aufgrund des Zeitraums als numerisch (1,0) anstelle einer Ganzzahl. Möglicherweise wurde dies angegeben, um dem Datentyp des Ausdrucks zu entsprechen (eine bewährte Methode). Persönlich würde ich 1.0in diesem Fall angeben .
Dan Guzman
Das Fehlen von 0Nachkommastellen und die Tatsache, dass decimalder Datentyp eine höhere Priorität hat als intdie Konstante, würde bei Bedarf ohnehin implizit umgewandelt, was mich zu der Annahme veranlassen würde, dass es sich eher um einen Tippfehler als um einen absichtlichen handelt.
Martin Smith

Antworten:

18

1.ist eine NUMERIC(oder DECIMAL) Konstante, während 1eine INTEGERKonstante ist. In einigen Fällen ist es nützlich, den Datentyp einer Konstanten explizit anzugeben, um eine unnötige (oder unerwünschte) implizite Typkonvertierung zu vermeiden.

Betrachten Sie zum Beispiel

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

Dann wird select 1/f1 from tzurückgegeben 0( INTEGER), während select 1./f1 from tzurückgegeben wird 0.5( DECIMAL).

Man könnte annehmen, dass sich auf der linken Seite des Vergleichs in Ihrem Beispiel eine DECIMALSpalte befindet, und die explizite Angabe einer DECIMALKonstante könnte die Leistung geringfügig verbessern, indem eine implizite Typumwandlung vermieden wird.

mustaccio
quelle