FirebirdSQL logo

Числовые константы

Числовая константа — это любое правильное число в одной из поддерживаемых нотаций:

  • В SQL, для чисел в стандартной десятичной записи, десятичная точка всегда представлена символом точки и тысячи не разделены. Включение запятых, пробелов, и т.д. вызовет ошибки.

  • Экспоненциальная запись, например число 0.0000234 может быть записано как 2.34e-5.

  • Шестнадцатеричная запись (см. ниже) чисел поддерживается начиная с Firebird 2.5.

Далее показаны форматы числовых литералов и их типы.Где <d> - десятичная цифра, <h> - шестнадцатеричная цифра.

Table 1. Формат числовых констант
Формат Тип

<d>[<d> …​]

INTEGER, BIGINT, INT128 или DECFLOAT(34) (зависит от того, подходит ли значение типу). DECFLOAT(34) используется для значений, которые не помещаются в INT128.

0{x|X} <h>[<h> …​]

INTEGER для 1-8 шестнадцатеричных цифр, BIGINT для 9-16 цифр, INT128 для 17-32 цифр (доступно с Firebird 4.0.1).

<d>[<d> …​].[<d> …​]

NUMERIC(18, n), NUMERIC(38, n) или DECFLOAT(34) где n зависит от количества цифр после десятичной точки, а точность от общего количества цифр.

Для обеспечения обратной совместимости некоторые значения из 19 цифр отображаются на NUMERIC(18, n).DECFLOAT(34) используется, когда немасштабированное значение не помещается в INT128.

<d>[<d> …​][. [<d> …​]] E <d>[<d> …​]

DOUBLE PRECISION или DECFLOAT(34), где DECFLOAT используется, только если количество цифр 20 или больше, или абсолютный показатель степени 309 или больше.

Шестнадцатеричная нотация чисел

Константы целочисленных типов можно указать в шестнадцатеричном формате.Начиная с Firebird 4.0.1 числа состоящие из 17-32 шестнадцатеричных цифр будут интерпретированы как INT128.

Синтаксис:
{x|X}<hexdigits>

<hexdigits> ::= 1-32 of <hexdigit>

<hexdigit> ::= 0..9 | A..F | a..f
Table 1. Константы целочисленных типов в шестнадцатеричном формате
Количество шестнадцатеричных цифр Тип данных

1-8

INTEGER

9-16

BIGINT

17-32

INT128

Example 1. Шестнадцатеричные константы
SELECT 0x6FAA0D3 FROM rdb$database -- returns 117088467
SELECT 0x4F9 FROM rdb$database -- returns 1273
SELECT 0x6E44F9A8 FROM rdb$database -- returns 1850014120
SELECT 0x9E44F9A8 FROM rdb$database -- returns -1639646808 (an INTEGER)
SELECT 0x09E44F9A8 FROM rdb$database -- returns 2655320488 (a BIGINT)
SELECT 0x28ED678A4C987 FROM rdb$database -- returns 720001751632263
SELECT 0xFFFFFFFFFFFFFFFF FROM rdb$database -- returns -1