Jaka jest różnica między „wyrażeniem <= 1”. i „wyrażenie <= 1”?

11

Recenzowanie kodu i instrukcji case ma expression <= 1.w przeciwieństwie do<= 1

Nie jestem pewien, jaki jest cel tego 1.. jakieś pomysły?

Pete Forester
źródło
3
SQL Server traktuje 1.literał jako liczbę (1,0) zamiast liczby całkowitej ze względu na kropkę. Być może zostało to określone w celu dopasowania typu danych wyrażenia (najlepsza praktyka). Osobiście sprecyzowałbym 1.0w tym przypadku.
Dan Guzman
Brak jakiejkolwiek 0kropki dziesiętnej i fakt, że decimalma ona wyższy priorytet niż typ danych, w intkażdym razie pośrednio zostanie w razie potrzeby odrzucony, co sprawiłoby, że pomyślałem, że to raczej błąd w pisaniu niż celowe.
Martin Smith

Odpowiedzi:

18

1. jest NUMERICDECIMAL stałą (lub ), podczas gdy 1jest INTEGERstałą. W niektórych przypadkach użyteczne jest jawne określenie typu danych, aby uniknąć niepotrzebnej (lub niepożądanej) niejawnej konwersji typu.

Zastanów się na przykład

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

Następnie select 1/f1 from tzwraca 0( INTEGER), podczas gdyselect 1./f1 from t zwraca 0.5( DECIMAL).

Można założyć, że po lewej stronie porównania w twoim przykładzie znajduje się DECIMALkolumna, a wyraźne określenie DECIMALstałej może nieznacznie poprawić wydajność, unikając rzutowania typu niejawnego.

mustaccio
źródło