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

Вместо двойного (экранированного) апострофа вы можете использовать другой символ или пару символов.

Ключевое слово q или Q предшествующее строке в кавычках сообщает парсеру, что некоторые левые и правые пары одинаковых символов являются разделителями для встроенного строкового литерала.

Синтаксис:
<alternate string literal> ::=
  { q | Q } <quote> <alternate start char>
  [ { <char> }... ]
  <alternate end char> <quote>
Note
Правила использования

Когда <alternate start char> является одним из символов '(', '{', '[' или '<', то <alternate end char> должен бытьиспользован в паре с соответствующим “партнёром”, а именно ')', '}', ']' или '>'. В других случаях <alternate end char> совпадает с <alternate start char>.

Внутри строки, т.е. <char> элементах, одиночные (не экранированные) кавычки могут быть использованы.Каждая кавычка будет частью результирующей строки.

Example 1. Использование альтернативных апострофов в строковых литералах
-- result: abc{def}ghi
SELECT Q'{abc{def}ghi}' FROM rdb$database;

-- result: That's a string
SELECT Q'!That's a string!' FROM rdb$database;
Example 2. Динамическая сборка запроса использующего строковые литералы.
EXECUTE BLOCK
RETURNS (
  RDB$TRIGGER_NAME CHAR(64)
)
AS
  DECLARE VARIABLE S VARCHAR(8191);
BEGIN
  S = 'SELECT RDB$TRIGGER_NAME FROM RDB$TRIGGERS WHERE RDB$RELATION_NAME IN ';
  S = S || Q'! ('SALES_ORDER', 'SALES_ORDER_LINE')!';
  FOR
    EXECUTE STATEMENT :S
    INTO :RDB$TRIGGER_NAME
  DO
    SUSPEND;
END
Набор символов для строковых литералов

При необходимости строковому литералу может предшествовать имя набор символов, который начинается с префикса подчеркивания “_”.Это известно как вводный синтаксис (Introducer syntax). Его цель заключается в информировании Firebird о том, как интерпретировать и хранить входящую строку.

Example 1. Вводный синтаксис для строковых литералов
-- обратите внимание на префикс '_'
INSERT INTO People
VALUES (_ISO8859_1 'Hans-Jörg Schäfer');