Перейти к содержанию

FORMAT

Скалярная функция FORMAT подставляет значения в строку формата, как функция format в PostgreSQL. Функция поддерживает спецификаторы %s, %I, %L и %%.

Синтаксис

FORMAT ( string , expression )

Выражение

Диаграмма

NOT table . column abs case cast coalesce CURRENT_DATE current_timestamp current_user format ilike json_extract_path literal localtimestamp lower pico_config_file_path pico_instance_dir pico_instance_health_status pico_instance_name pico_instance_uuid pico_log_level pico_log_level_map pico_num_pretty pico_raft_leader_id pico_raft_leader_uuid pico_replicaset_name pico_size_pretty pico_sql_pretty pico_tier_name _pico_bucket substr substring to_char to_date trim upper version array_literal NOT EXISTS ( dql ( dql expression , ) like IS NOT NULL TRUE FALSE UNKNOWN expression NOT BETWEEN expression AND IN + - * / % <> != >= > <= < = || AND OR expression

Литерал

Диаграмма

TRUE FALSE NULL decimal double integer string unsigned $ unsigned ?

Правила

  • Каждый спецификатор %s, %I и %L берет следующее значение по порядку:
    • %s — значение как текст. NULL дает пустую строку.
    • %I — значение как идентификатор. Функция заключает его в двойные кавычки, если без кавычек парсер прочитает его иначе: например, имя с заглавными буквами, пробелом или ключевое слово. Значение NULL дает ошибку.
    • %L — значение как строковый литерал в одинарных кавычках. Одинарная кавычка внутри значения удваивается. NULL дает NULL без кавычек.
  • %% дает один символ %.
  • Значение любого типа функция приводит к тексту так же, как CAST(значение AS TEXT). Значение, которое нельзя привести к тексту, например массив, дает ошибку.
  • Лишние значения функция пропускает. Если значений меньше, чем спецификаторов, функция дает ошибку too few arguments for format().
  • Другие спецификаторы, а также номера аргументов (%1$s), ширина и флаги PostgreSQL не поддерживаются и дают ошибку.
  • Если строка формата равна NULL, результат равен NULL.
  • Результат имеет тип TEXT.

Примеры

SELECT format('INSERT INTO %I VALUES (%s, %L)', 'My Table', 1, 'it''s');
Результат
+------------------------------------------------+
| col_1                                          |
+================================================+
| "INSERT INTO \"My Table\" VALUES (1, 'it''s')" |
+------------------------------------------------+
(1 rows)