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

CAST

Функция CAST используется в DQL-командах для приведения выражения к определенному типу.

Синтаксис

CAST ( expression AS unrestricted_type ) expression :: unrestricted_type unrestricted_type string

Выражение

Диаграмма

NOT table . column abs case cast coalesce current_date current_user 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_raft_leader_id pico_raft_leader_uuid pico_replicaset_name 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 ?

Тип

Диаграмма

Примеры

В качестве примера покажем преобразование дробных чисел в целые с отбрасыванием дробной части. Используем следующую таблицу:

Table_scores

В обычном виде значения колонки score имеют дробную часть и определены в схеме данных типом DECIMAL:

SELECT "score" FROM "scoring";
---
  'metadata': [
  {'name': 'score', 'type': 'decimal'}],
  'rows': [
    [78.33],
    [84.61],
    [47.28]]
...

Преобразуем тип значений из колонки score в INT с помощью функции CAST:

sql> SELECT CAST("score" AS INT) FROM "scoring";
+-------+
| COL_1 |
+=======+
| 78    |
|-------|
| 84    |
|-------|
| 47    |
+-------+
(3 rows)

В качестве альтернативы можем использовать синтаксис PostgreSQL — двойное двоеточие:

sql> SELECT "score"::INT FROM "scoring";
+-------+
| COL_1 |
+=======+
| 78    |
|-------|
| 84    |
|-------|
| 47    |
+-------+
(3 rows)

Для строковых констант также поддерживается синтаксис типизированного литерала из PostgreSQL — имя типа перед строкой. Запись INT '42' эквивалентна CAST('42' AS INT):

sql> SELECT INT '42', BOOL 't';
+-------+-------+
| COL_1 | COL_2 |
+=======+=======+
| 42    | true  |
+-------+-------+
(1 rows)