FirebirdSQL logo
 Типы данныхОператоры определения данных (DDL) 
Строковые литералы для двоичных строк

Начиная с Firebird 2.5 строковые константы могут быть записаны в шестнадцатеричной нотации, так называемые “двоичные строки”.Каждая пара шестнадцатеричных цифр определяет один байт в строке.Строки введённые таким образом будут иметь кодировку OCTETS по умолчанию,но вводный синтаксис (introducer syntax) может быть использован для принудительной интерпретации строки в другом наборе символов.

Синтаксис:
<binary string literal> ::=
  {x | X} <quote> [<space>...] [ { <hexit> [<space>...] <hexit> [<space>...] }... ] <quote>
          [ { <separator> <quote> [ <space>... ] [ { <hexit> [ <space>... ]
            <hexit> [ <space>... ] }... ] <quote> }... ]

<hexit> ::= an even number of <hexdigit>

<hexdigit> ::= 0..9 | A..F | a..f
Example 1. Примеры:
SELECT x'4E657276656E' FROM rdb$database
-- returns 4E657276656E, a 6-byte 'binary' string

SELECT _ascii x'4E657276656E' FROM rdb$database
-- returns 'Nerven' (same string, now interpreted as ASCII text)

SELECT _iso8859_1 x'53E46765' FROM rdb$database
-- returns 'Säge' (4 chars, 4 bytes)

SELECT _utf8 x'53C3A46765' FROM rdb$database
-- returns 'Säge' (4 chars, 5 bytes)
Note

Как будут отображена двоичная строка зависит от интерфейса клиента.Например, утилита isql использует заглавные буквы A-F, в то время как FlameRobin буквы в нижнем регистре.Другие могут использовать другие правила конвертирования, например отображать пробелы между парами байт: '4E 65 72 76 65 6E'.

Шестнадцатеричная нотация позволяет вставить любой байт (включая 00) в любой позиции в строке.

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

Example 2. Двоичный литерал прерванный пробелом
-- Group per byte (whitespace inside literal)
select _win1252 x'42 49 4e 41 52 59'
from RDB$DATABASE;
-- output: BINARY

-- whitespace between literal
select _win1252 x'42494e'
                 '415259'
from RDB$DATABASE;
-- output: BINARY

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

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

  • В 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 или больше.