В SQL как получить максимальное значение для целого числа?

Я пытаюсь узнать максимальное значение для целого (подписанного или неподписанного) из базы данных MySQL. Есть ли способ отбросить эту информацию из самой базы данных?

Существуют ли какие-либо встроенные константы или функции, которые я могу использовать (стандартный SQL или MySQL).

В http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html в нем перечислены значения - но есть ли способ, чтобы база данных сообщила мне.

Следующее дает мне MAX_BIGINT - мне бы хотелось, MAX_INT.

SELECT CAST( 99999999999999999999999 AS SIGNED ) as max_int;
# max_int | 9223372036854775807

Спасибо заранее,

Ответ 1

В Mysql есть дешевый трюк, чтобы сделать это:

mysql> select ~0;
+----------------------+
| ~0                   |
+----------------------+
| 18446744073709551615 |
+----------------------+

тильда - побитовое отрицание. Результирующее значение - это bigint. См.: http://dev.mysql.com/doc/refman/5.1/en/bit-functions.html#operator_bitwise-invert

Для других целочисленных ароматов вы можете использовать правильный оператор с битрейтом >> следующим образом:

SELECT ~0 as max_bigint_unsigned
,      ~0 >> 32 as max_int_unsigned
,      ~0 >> 40 as max_mediumint_unsigned
,      ~0 >> 48 as max_smallint_unsigned
,      ~0 >> 56 as max_tinyint_unsigned
,      ~0 >> 1  as max_bigint_signed
,      ~0 >> 33 as max_int_signed
,      ~0 >> 41 as max_mediumint_signed
,      ~0 >> 49 as max_smallint_signed
,      ~0 >> 57 as max_tinyint_signed
\G

*************************** 1. row ***************************
   max_bigint_unsigned: 18446744073709551615
      max_int_unsigned: 4294967295
max_mediumint_unsigned: 16777215
 max_smallint_unsigned: 65535
  max_tinyint_unsigned: 255
     max_bigint_signed: 9223372036854775807
        max_int_signed: 2147483647
  max_mediumint_signed: 8388607
   max_smallint_signed: 32767
    max_tinyint_signed: 127
1 row in set (0.00 sec)

Ответ 2

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