В чем разница между «выражением <= 1». и «выражение <= 1»?

11

Пересмотр кода и выписки дела expression <= 1.в отличие от<= 1

Я не уверен, какова цель этого 1.. есть идеи?

Пит Форестер
источник
3
SQL Server обрабатывает 1.литерал как числовой (1,0) вместо целого числа из-за точки. Возможно, это было указано для того, чтобы соответствовать типу данных выражения (лучшая практика). Лично я бы уточнил 1.0в этом случае.
Дан Гузман
Отсутствие любого 0после десятичной точки и тот факт, что константа decimalтипа данных имеет более высокий приоритет, чем intконстанта, будет неявно приведена в любом случае, если потребуется, заставит меня думать, что это скорее ошибка печати, а не преднамеренная.
Мартин Смит

Ответы:

18

1.является NUMERIC(или DECIMAL) константой, а 1является INTEGERконстантой. В некоторых случаях полезно явно указывать тип данных константы, чтобы избежать ненужного (или нежелательного) неявного преобразования типа.

Рассмотрим, например,

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

Затем select 1/f1 from tвозвращает 0( INTEGER), а select 1./f1 from tвозвращает 0.5( DECIMAL).

Можно предположить, что в левой части сравнения в вашем примере есть DECIMALстолбец, и явное указание DECIMALконстанты может незначительно улучшить производительность, избегая неявного приведения типов.

mustaccio
источник