Apa perbedaan antara “ekspresi <= 1.” dan “ekspresi <= 1”?

11

Meninjau kode dan pernyataan kasus telah expression <= 1.bertentangan<= 1

Saya tidak yakin apa tujuannya 1.. Adakah pikiran?

Pete Forester
sumber
3
SQL Server memperlakukan 1.literal sebagai numerik (1,0), bukan bilangan bulat karena periode. Mungkin itu ditentukan untuk mencocokkan tipe data dari ekspresi (praktik terbaik). Secara pribadi, saya akan menentukan 1.0dalam kasus itu.
Dan Guzman
Kurangnya 0setelah titik desimal dan fakta yang decimalmemiliki prioritas lebih tinggi dari datatype daripada intsehingga konstanta akan secara implisit dilemparkan pula jika diperlukan akan membuat saya berpikir bahwa itu kemungkinan kesalahan pengetikan daripada sengaja.
Martin Smith

Jawaban:

18

1.adalah NUMERIC(atau DECIMAL) konstan, sedangkan 1adalah INTEGERkonstan. Dalam beberapa kasus, berguna untuk menentukan tipe data konstanta secara eksplisit untuk menghindari konversi tipe implisit yang tidak perlu (atau tidak diinginkan).

Pertimbangkan, misalnya

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

Kemudian select 1/f1 from tmengembalikan 0( INTEGER), sementara select 1./f1 from tmengembalikan 0.5( DECIMAL).

Orang mungkin berasumsi bahwa di sisi kiri perbandingan dalam contoh Anda ada DECIMALkolom, dan secara eksplisit menentukan DECIMALkonstanta secara marginal dapat meningkatkan kinerja dengan menghindari tipe gips implisit.

mustaccio
sumber