целое число Максимальное значение константы в SQL Server T-SQL? - PullRequest
41 голосов
/ 30 апреля 2010

Существуют ли какие-либо константы в T-SQL, как в некоторых других языках, которые предоставляют диапазоны максимальных и минимальных значений типов данных, таких как int?

У меня есть кодовая таблица, где в каждой строке есть столбец верхнего и нижнего диапазона, и мне нужна запись, представляющая диапазон, где верхний диапазон - это максимальное значение, которое может содержать int (вроде как хакерская бесконечность). Я бы предпочел не кодировать это жестко, а вместо этого использовать что-то вроде SET UpperRange = int.Max

Ответы [ 3 ]

12 голосов
/ 30 апреля 2010

Есть два варианта:

  • пользовательская скалярная функция
  • таблица свойств

В Oracle вы можете сделать это в пакетах - ближайший SQL Server - это сборки ...

8 голосов
/ 30 апреля 2010

Я не думаю, что есть какие-либо определенные константы, но вы можете определить их самостоятельно, сохранив значения в таблице или используя скалярную функцию.

Таблица

Настройка таблицы с тремя столбцами: TypeName, Max и Min. Таким образом, вы должны заполнить их только один раз.

Скалярная функция

В качестве альтернативы вы можете использовать скалярные функции GetMaxInt (), например (см. StackOverflow ответ для реального примера.

Вы можете найти все максимальные / минимальные значения здесь: http://msdn.microsoft.com/en-us/library/ms187752.aspx

3 голосов
/ 14 февраля 2014

Избегайте скалярных функций, таких как чума:
Проблема производительности скалярного UDF

При этом я бы не стал использовать таблицу из 3 колонок, предложенную другим человеком.
Это может привести к неявным конверсиям практически везде, где бы вы их не использовали.
Вам также придется присоединяться к таблице несколько раз, если вам нужно использовать ее для нескольких типов.

Вместо этого создайте столбец для каждого минимального и максимального значений каждого типа данных (определенный с использованием его собственного типа данных) и вызовите их непосредственно для сравнения. Пример:

SELECT *
  FROM SomeTable as ST
  CROSS JOIN TypeRange as TR
  WHERE ST.MyNumber BETWEEN TR.IntMin  AND TR.IntMax
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...