← R2 SQL / r2-sql / sql-reference
Скалярные функции
Скалярные функции преобразуют отдельные значения и могут использоваться в SELECT, WHERE, GROUP BY, HAVING, а также ORDER BY предложения.
Основные функции
arrow_cast
Приводит выражение к указанному типу данных Arrow по имени в виде строки.
SELECT arrow_cast(total_amount, 'Float32') AS amount_f32
FROM my_namespace.sales_data
WHERE total_amount IS NOT NULL
LIMIT 1arrow_typeof
Возвращает имя типа данных Arrow для выражения.
SELECT arrow_typeof(total_amount) AS amount_type,
arrow_typeof(customer_id) AS id_type
FROM my_namespace.sales_data
LIMIT 1coalesce
Возвращает первый аргумент, отличный от NULL.
SELECT coalesce(department, region, 'unknown') AS first_val
FROM my_namespace.sales_data
LIMIT 5get_field
Извлекает поле из struct по имени.
SELECT get_field(named_struct('customer', customer_id, 'amount', total_amount), 'amount') AS amt
FROM my_namespace.sales_data
WHERE total_amount IS NOT NULL
LIMIT 1greatest
Возвращает наибольшее значение из списка аргументов.
SELECT greatest(total_amount, unit_price, quantity) AS max_val
FROM my_namespace.sales_data
WHERE total_amount IS NOT NULL
LIMIT 5least
Возвращает наименьшее значение из списка аргументов.
SELECT least(total_amount, unit_price, quantity) AS min_val
FROM my_namespace.sales_data
WHERE total_amount IS NOT NULL
LIMIT 5named_struct
Создаёт структуру с именованными полями из пар ключ-значение.
SELECT named_struct('customer', customer_id, 'amount', total_amount) AS info
FROM my_namespace.sales_data
WHERE total_amount IS NOT NULL
LIMIT 1nullif
Возвращает NULL, если оба аргумента равны, в противном случае возвращает первый аргумент.
SELECT nullif(department, 'Unknown') AS dept
FROM my_namespace.sales_data
LIMIT 5nvl
Возвращает второй аргумент, если первый равен NULL. Псевдоним: ifnull.
SELECT nvl(department, 'N/A') AS dept
FROM my_namespace.sales_data
LIMIT 5nvl2
Возвращает второй аргумент, если первый не равен NULL, иначе возвращает третий.
SELECT nvl2(department, 'has_dept', 'no_dept') AS dept_status
FROM my_namespace.sales_data
LIMIT 5overlay
Заменяет подстроку в заданной позиции.
SELECT customer_id,
overlay(customer_id PLACING 'XX' FROM 1 FOR 2) AS masked
FROM my_namespace.sales_data
LIMIT 3struct
Создаёт структуру с позиционными полями. Псевдоним: row.
SELECT struct(customer_id, total_amount, region) AS info
FROM my_namespace.sales_data
WHERE total_amount IS NOT NULL
LIMIT 1Криптографические функции
digest
Возвращает хеш строки с использованием указанного алгоритма. Поддерживаемые алгоритмы: md5, sha224, sha256, sha384, sha512.
SELECT customer_id, digest(customer_id, 'sha256') AS hash
FROM my_namespace.sales_data
LIMIT 1md5
Возвращает хеш MD5 строки.
SELECT customer_id, md5(customer_id) AS hash
FROM my_namespace.sales_data
LIMIT 1sha224
Возвращает хеш SHA-224 строки.
SELECT sha224(customer_id) AS hash
FROM my_namespace.sales_data
LIMIT 1sha256
Возвращает хеш SHA-256 строки.
SELECT customer_id, sha256(customer_id) AS hash
FROM my_namespace.sales_data
LIMIT 1sha384
Возвращает хеш SHA-384 строки.
SELECT sha384(customer_id) AS hash
FROM my_namespace.sales_data
LIMIT 1sha512
Возвращает хеш SHA-512 строки.
SELECT sha512(customer_id) AS hash
FROM my_namespace.sales_data
LIMIT 1Функции даты и времени
current_date
Возвращает сегодняшнюю дату. Псевдоним: today.
SELECT current_date() AS today_date
FROM my_namespace.sales_data
LIMIT 1current_time
Возвращает текущее время. Точность округляется до границ в 10 мс.
SELECT current_time() AS now_time
FROM my_namespace.sales_data
LIMIT 1date_bin
Группирует временную метку по интервалам фиксированного размера, выровненным относительно начальной точки.
SELECT date_bin(INTERVAL '1 hour', timestamp, '2025-01-01T00:00:00Z') AS hour_bin,
COUNT(*) AS cnt
FROM my_namespace.sales_data
GROUP BY date_bin(INTERVAL '1 hour', timestamp, '2025-01-01T00:00:00Z')
ORDER BY hour_bin
LIMIT 5date_part
Извлекает компонент временной метки. Псевдоним: datepart.
Поддерживаемые поля: year, month, day, hour, minute, second, millisecond, microsecond, week, dow, doy, quarter, epoch.
SELECT date_part('hour', timestamp) AS hr,
date_part('minute', timestamp) AS mn
FROM my_namespace.sales_data
LIMIT 1date_trunc
Усекает временную метку до указанной единицы измерения. Псевдоним: datetrunc.
Поддерживаемые единицы измерения: year, month, week, day, hour, minute, second.
SELECT date_trunc('day', timestamp) AS day_trunc, COUNT(*) AS cnt
FROM my_namespace.sales_data
GROUP BY date_trunc('day', timestamp)
ORDER BY day_trunc
LIMIT 5from_unixtime
Преобразует эпоху Unix (в секундах) во временную метку.
SELECT from_unixtime(1770000000) AS ts
FROM my_namespace.sales_data
LIMIT 1make_date
Формирует дату из значений года, месяца и дня.
SELECT make_date(2026, 3, 1) AS d
FROM my_namespace.sales_data
LIMIT 1make_time
Формирует время из значений часа, минуты и секунды.
SELECT make_time(14, 30, 0) AS t
FROM my_namespace.sales_data
LIMIT 1now
Возвращает текущую временную метку. Псевдонимы: current_timestamp.
Точность округляется до границ в 10 мс.
SELECT now() AS current_ts
FROM my_namespace.sales_data
LIMIT 1to_char
Форматирует временную метку в строку по формату strftime. Псевдоним: date_format.
SELECT to_char(timestamp, '%Y-%m-%d %H:%M') AS formatted
FROM my_namespace.sales_data
LIMIT 1to_date
Разбирает дату из строки по указанному шаблону формата.
SELECT to_date('2026-03-01', '%Y-%m-%d') AS d
FROM my_namespace.sales_data
LIMIT 1to_local_time
Удаляет информацию о часовом поясе из временной метки.
SELECT to_local_time(timestamp) AS local_ts
FROM my_namespace.sales_data
LIMIT 1to_time
Разбирает время из строки по указанному шаблону формата.
SELECT to_time('14:30:00', '%H:%M:%S') AS t
FROM my_namespace.sales_data
LIMIT 1to_timestamp
Разбирает временную метку из строки по указанному шаблону формата.
SELECT to_timestamp('2026-03-01 12:00:00', '%Y-%m-%d %H:%M:%S') AS ts
FROM my_namespace.sales_data
LIMIT 1to_timestamp_micros
Преобразует микросекунды, прошедшие с начала эпохи Unix, во временную метку.
SELECT to_timestamp_micros(1770000000000000) AS ts
FROM my_namespace.sales_data
LIMIT 1to_timestamp_millis
Преобразует миллисекунды, прошедшие с начала эпохи Unix, во временную метку.
SELECT to_timestamp_millis(1770000000000) AS ts
FROM my_namespace.sales_data
LIMIT 1to_timestamp_nanos
Преобразует наносекунды, прошедшие с начала эпохи Unix, во временную метку. При больших значениях возможно переполнение.
SELECT to_timestamp_nanos(1770000000000000000) AS ts
FROM my_namespace.sales_data
LIMIT 1to_timestamp_seconds
Преобразует секунды, прошедшие с начала эпохи Unix, во временную метку.
SELECT to_timestamp_seconds(1770000000) AS ts
FROM my_namespace.sales_data
LIMIT 1to_unixtime
Преобразует временную метку в эпоху Unix (в секундах).
SELECT to_unixtime(timestamp) AS epoch
FROM my_namespace.sales_data
LIMIT 1Функции кодирования
decode
Декодирует строку в двоичные данные. Поддерживаемая кодировка: base64.
SELECT decode('aGVsbG8=', 'base64') AS raw
FROM my_namespace.sales_data
LIMIT 1encode
Кодирует двоичные данные в строку. Поддерживаемая кодировка: base64.
SELECT encode(CAST('hello' AS BYTEA), 'base64') AS b64
FROM my_namespace.sales_data
LIMIT 1Функции JSON
json_as_text
Возвращает любое значение JSON в виде текста без кавычек.
SELECT json_as_text(doc, 'description') AS description
FROM my_namespace.sales_data
LIMIT 5json_contains
Возвращает true, если указанный путь ключа существует в JSON.
SELECT customer_id, json_contains(doc, 'email') AS has_email
FROM my_namespace.sales_data
LIMIT 5json_get
Извлекает значение по пути ключа. Возвращает тип union, используйте типизированные варианты (json_get_str, json_get_int, и т. д.) для предсказуемых результатов.
SELECT json_get(doc, 'name') AS name
FROM my_namespace.sales_data
LIMIT 5json_get_array
Возвращает массив JSON в виде списка строк.
SELECT json_get_array(doc, 'tags') AS tags
FROM my_namespace.sales_data
LIMIT 5json_get_bool
Возвращает логическое значение из столбца JSON по пути ключа.
SELECT json_get_bool(doc, 'active') AS is_active
FROM my_namespace.sales_data
LIMIT 5json_get_float
Возвращает значение с плавающей точкой из столбца JSON по пути ключа.
SELECT json_get_float(doc, 'price') AS price
FROM my_namespace.sales_data
LIMIT 5json_get_int
Возвращает целочисленное значение из столбца JSON по пути ключа.
SELECT json_get_int(doc, 'age') AS age
FROM my_namespace.sales_data
LIMIT 5json_get_json
Возвращает вложенный JSON в виде необработанной строки JSON.
SELECT json_get_json(doc, 'metadata') AS metadata
FROM my_namespace.sales_data
LIMIT 5json_get_str
Возвращает строковое значение из столбца JSON по пути ключа.
SELECT json_get_str(doc, 'name') AS name
FROM my_namespace.sales_data
LIMIT 5json_length
Возвращает длину массива или объекта JSON.
SELECT json_length(doc, 'items') AS item_count
FROM my_namespace.sales_data
LIMIT 5Математические функции
abs
Возвращает абсолютное значение числа.
SELECT abs(total_amount - 500) AS distance_from_500
FROM my_namespace.sales_data
WHERE total_amount IS NOT NULL
LIMIT 5cbrt
Возвращает кубический корень числа.
SELECT cbrt(CAST(quantity AS DOUBLE)) AS cbrt_qty
FROM my_namespace.sales_data
WHERE quantity IS NOT NULL
LIMIT 5ceil
Возвращает наименьшее целое число, большее или равное заданному числу.
SELECT ceil(total_amount) AS rounded_up
FROM my_namespace.sales_data
WHERE total_amount IS NOT NULL
LIMIT 5degrees
Преобразует радианы в градусы.
SELECT degrees(pi()) AS full_circle
FROM my_namespace.sales_data
LIMIT 1exp
Возвращает e возведенное в заданную степень.
SELECT exp(total_amount / 1000.0) AS exp_val
FROM my_namespace.sales_data
WHERE total_amount IS NOT NULL
LIMIT 5factorial
Возвращает факториал неотрицательного целого числа.
SELECT factorial(5) AS fact5
FROM my_namespace.sales_data
LIMIT 1floor
Возвращает наибольшее целое число, меньшее или равное заданному числу.
SELECT floor(total_amount) AS rounded_down
FROM my_namespace.sales_data
WHERE total_amount IS NOT NULL
LIMIT 5gcd
Возвращает наибольший общий делитель двух целых чисел.
SELECT gcd(12, 8) AS gcd_val
FROM my_namespace.sales_data
LIMIT 1Гиперболические функции
sinh, cosh, tanh, asinh, acosh, atanh
SELECT sinh(1.0) AS sh, cosh(1.0) AS ch, tanh(1.0) AS th
FROM my_namespace.sales_data
LIMIT 1isnan
Возвращает true, если значение является NaN.
SELECT isnan(0.0 / 0.0) AS is_nan
FROM my_namespace.sales_data
LIMIT 1iszero
Возвращает true, если значение равно нулю.
SELECT iszero(0.0) AS is_zero
FROM my_namespace.sales_data
LIMIT 1lcm
Возвращает наименьшее общее кратное двух целых чисел.
SELECT lcm(4, 6) AS lcm_val
FROM my_namespace.sales_data
LIMIT 1ln
Возвращает натуральный логарифм.
SELECT ln(total_amount) AS ln_val
FROM my_namespace.sales_data
WHERE total_amount > 0
LIMIT 5журнал
Возвращает логарифм значения по заданному основанию.
SELECT log(10.0, total_amount) AS log10_val
FROM my_namespace.sales_data
WHERE total_amount > 0
LIMIT 5log2
Возвращает логарифм по основанию 2.
SELECT log2(total_amount) AS log2_val
FROM my_namespace.sales_data
WHERE total_amount > 0
LIMIT 5log10
Возвращает логарифм по основанию 10.
SELECT log10(total_amount) AS log10_val
FROM my_namespace.sales_data
WHERE total_amount > 0
LIMIT 5nanvl
Возвращает первый аргумент, если он не является NaN, иначе возвращает второй.
SELECT nanvl(0.0 / 0.0, -1.0) AS safe_val
FROM my_namespace.sales_data
LIMIT 1pi
Возвращает значение числа пи.
SELECT pi() AS pi_val
FROM my_namespace.sales_data
LIMIT 1power
Возводит число в степень. Псевдоним: pow.
SELECT power(total_amount, 2.0) AS amount_squared
FROM my_namespace.sales_data
WHERE total_amount IS NOT NULL
LIMIT 5radians
Преобразует градусы в радианы.
SELECT radians(180.0) AS pi_val
FROM my_namespace.sales_data
LIMIT 1random
Возвращает случайное число с плавающей точкой от 0 до 1.
SELECT random() AS rnd
FROM my_namespace.sales_data
LIMIT 1round
Округляет число до заданного количества знаков после запятой.
SELECT round(total_amount, 2) AS rounded
FROM my_namespace.sales_data
WHERE total_amount IS NOT NULL
LIMIT 5signum
Возвращает знак числа: -1, 0 или 1.
SELECT signum(total_amount - 500) AS sign_val
FROM my_namespace.sales_data
WHERE total_amount IS NOT NULL
LIMIT 5sqrt
Возвращает квадратный корень числа.
SELECT sqrt(CAST(quantity AS DOUBLE)) AS sqrt_qty
FROM my_namespace.sales_data
WHERE quantity IS NOT NULL
LIMIT 5Тригонометрические функции
sin, cos, tan, asin, acos, atan, atan2, cot
SELECT sin(1.0) AS s, cos(1.0) AS c, tan(1.0) AS t,
asin(0.5) AS as_val, acos(0.5) AS ac_val, atan(1.0) AS at_val
FROM my_namespace.sales_data
LIMIT 1trunc
Усекает число до указанного количества знаков после запятой.
SELECT trunc(total_amount, 0) AS truncated
FROM my_namespace.sales_data
WHERE total_amount IS NOT NULL
LIMIT 5Функции для регулярных выражений
regexp_count
Возвращает количество совпадений с шаблоном в строке.
SELECT department, regexp_count(department, '[aeiou]') AS vowels
FROM my_namespace.sales_data
WHERE department IS NOT NULL
LIMIT 5regexp_instr
Возвращает позицию первого совпадения с шаблоном.
SELECT department, regexp_instr(department, '[0-9]') AS digit_pos
FROM my_namespace.sales_data
WHERE department IS NOT NULL
LIMIT 5regexp_like
Возвращает true, если строка соответствует регулярному выражению.
SELECT department, regexp_like(department, '^[A-Z]{2}') AS starts_two_caps
FROM my_namespace.sales_data
WHERE department IS NOT NULL
LIMIT 5regexp_match
Возвращает первое совпадение с шаблоном в виде массива.
SELECT department, regexp_match(department, '([A-Z][a-z]+)') AS first_word
FROM my_namespace.sales_data
WHERE department IS NOT NULL
LIMIT 3regexp_replace
Заменяет совпадения с шаблоном на строку замены.
SELECT department, regexp_replace(department, '[0-9]', '#') AS no_digits
FROM my_namespace.sales_data
WHERE department IS NOT NULL
LIMIT 5Строковые функции
ascii
Возвращает код ASCII первого символа.
SELECT customer_id, ascii(customer_id) AS first_code
FROM my_namespace.sales_data
LIMIT 3bit_length
Возвращает длину строки в битах.
SELECT customer_id, bit_length(customer_id) AS bits
FROM my_namespace.sales_data
LIMIT 3btrim
Удаляет символы с обеих сторон строки. Псевдоним: trim.
SELECT btrim(' hello ') AS trimmed
FROM my_namespace.sales_data
LIMIT 1chr
Возвращает символ по заданному коду ASCII.
SELECT chr(65) AS letter
FROM my_namespace.sales_data
LIMIT 1concat
Объединяет две или более строки.
SELECT concat(department, ' - ', region) AS label
FROM my_namespace.sales_data
WHERE department IS NOT NULL
LIMIT 5concat_ws
Объединяет строки, используя разделитель.
SELECT concat_ws('/', region, department) AS path
FROM my_namespace.sales_data
WHERE department IS NOT NULL
LIMIT 5contains
Возвращает true, если строка содержит подстроку.
SELECT customer_id, contains(department, 'Sales') AS is_sales
FROM my_namespace.sales_data
WHERE department IS NOT NULL
LIMIT 5ends_with
Возвращает true, если строка заканчивается заданным суффиксом.
SELECT customer_id, ends_with(department, 'ing') AS ends_ing
FROM my_namespace.sales_data
WHERE department IS NOT NULL
LIMIT 5levenshtein
Возвращает расстояние Левенштейна между двумя строками.
SELECT department, levenshtein(department, 'Engineering') AS dist
FROM my_namespace.sales_data
WHERE department IS NOT NULL
LIMIT 5lower
Преобразует строку в нижний регистр.
SELECT lower(department) AS dept_lower
FROM my_namespace.sales_data
LIMIT 5ltrim
Удаляет символы с левой стороны строки.
SELECT ltrim(' hello') AS trimmed
FROM my_namespace.sales_data
LIMIT 1octet_length
Возвращает длину строки в байтах.
SELECT customer_id, octet_length(customer_id) AS bytes
FROM my_namespace.sales_data
LIMIT 3repeat
Повторяет строку заданное количество раз.
SELECT repeat(region, 2) AS doubled
FROM my_namespace.sales_data
LIMIT 3Заменить
Заменяет все вхождения подстроки.
SELECT department, replace(department, ' ', '_') AS underscored
FROM my_namespace.sales_data
WHERE department IS NOT NULL
LIMIT 5rtrim
Удаляет символы с правой стороны строки.
SELECT rtrim('hello ') AS trimmed
FROM my_namespace.sales_data
LIMIT 1split_part
Разбивает строку по разделителю и возвращает указанную часть (индексация начинается с 1).
SELECT customer_id, split_part(customer_id, '-', 1) AS first_part
FROM my_namespace.sales_data
WHERE customer_id IS NOT NULL
LIMIT 5starts_with
Возвращает true, если строка начинается с заданного префикса.
SELECT customer_id, starts_with(department, 'Eng') AS is_eng
FROM my_namespace.sales_data
WHERE department IS NOT NULL
LIMIT 5to_hex
Преобразует целое число в шестнадцатеричную строку.
SELECT to_hex(255) AS hex_ff
FROM my_namespace.sales_data
LIMIT 1upper
Преобразует строку в верхний регистр.
SELECT upper(region) AS region_upper
FROM my_namespace.sales_data
LIMIT 5uuid
Генерирует случайный UUID.
SELECT uuid() AS new_id
FROM my_namespace.sales_data
LIMIT 1Функции Unicode
character_length
Возвращает количество символов в строке. Псевдонимы: length, char_length.
SELECT department, character_length(department) AS len
FROM my_namespace.sales_data
WHERE department IS NOT NULL
LIMIT 5find_in_set
Возвращает позицию строки в списке значений, разделённых запятыми.
SELECT find_in_set('North', 'South,North,East,West') AS pos
FROM my_namespace.sales_data
LIMIT 1initcap
Делает заглавной первую букву каждого слова.
SELECT initcap('hello world') AS capped
FROM my_namespace.sales_data
LIMIT 1left
Возвращает крайние левые n символов строки.
SELECT department, left(department, 5) AS prefix
FROM my_namespace.sales_data
WHERE department IS NOT NULL
LIMIT 5lpad
Дополняет строку слева до указанной длины.
SELECT region, lpad(region, 15, '.') AS padded
FROM my_namespace.sales_data
LIMIT 5reverse
Переворачивает строку.
SELECT department, reverse(department) AS rev
FROM my_namespace.sales_data
WHERE department IS NOT NULL
LIMIT 5right
Возвращает крайние правые n символов строки.
SELECT department, right(department, 3) AS suffix
FROM my_namespace.sales_data
WHERE department IS NOT NULL
LIMIT 5rpad
Дополняет строку справа до заданной длины.
SELECT region, rpad(region, 15, '.') AS padded
FROM my_namespace.sales_data
LIMIT 5strpos
Возвращает позицию подстроки (нумерация с 1). Псевдонимы: instr, position.
SELECT department, strpos(department, 'a') AS a_pos
FROM my_namespace.sales_data
WHERE department IS NOT NULL
LIMIT 5substr
Возвращает подстроку заданной длины, начиная с указанной позиции. Псевдоним: substring.
SELECT department, substr(department, 1, 8) AS first_eight
FROM my_namespace.sales_data
WHERE department IS NOT NULL
LIMIT 5substr_index
Возвращает часть строки до n-е вхождение разделителя. Псевдоним: substring_index.
SELECT customer_id, substr_index(customer_id, '-', 1) AS first_segment
FROM my_namespace.sales_data
WHERE customer_id IS NOT NULL
LIMIT 5translate
Заменяет символы в строке согласно заданному соответствию.
SELECT department, translate(department, 'aeiou', '12345') AS coded
FROM my_namespace.sales_data
WHERE department IS NOT NULL
LIMIT 5