Довідник функцій PostgreSQL
Коротко про кожну функцію: що робить, як викликати, приклади, які можна змінити й запустити просто тут, і на що звернути увагу, щоб не спіткнутися.
Це основні функції, яких вистачає для більшості запитів. Усі інші — в офіційній документації PostgreSQL(відкриється в новій вкладці).
Умовні
Повертає перше значення зі списку, яке не NULL.
COALESCE(<значення1>, <значення2>, …)NULLIFПовертає NULL, якщо два значення рівні, а інакше — перше значення.
NULLIF(<значення>, <з чим порівняти>)GREATESTПовертає найбільше зі списку значень.
GREATEST(<значення1>, <значення2>, …)LEASTПовертає найменше зі списку значень.
LEAST(<значення1>, <значення2>, …)CASEПовертає різні значення залежно від умов — «якщо… то… інакше» в SQL.
CASE WHEN <умова> THEN <результат> … ELSE <інакше> ENDЧисла
Округлює число до цілого або до потрібної кількості знаків після коми.
ROUND(<число>)CEILОкруглює число вгору — до найближчого цілого, не меншого за нього.
CEIL(<число>)FLOORОкруглює число вниз — до найближчого цілого, не більшого за нього.
FLOOR(<число>)TRUNCВідкидає дробову частину числа без округлення.
TRUNC(<число>)ABSПовертає модуль числа — його значення без знака.
ABS(<число>)MODПовертає остачу від ділення одного числа на інше.
MOD(<ділене>, <дільник>)POWERПідносить число до степеня.
POWER(<число>, <степінь>)SQRTДобуває квадратний корінь із числа.
SQRT(<число>)WIDTH_BUCKETКаже, в який із рівних діапазонів потрапляє число: 1, 2, 3…
WIDTH_BUCKET(<значення>, <від>, <до>, <кількість кошиків>)RANDOMПовертає випадкове дробове число від 0 (включно) до 1 (не включно).
RANDOM()Рядки
Рахує, скільки символів у рядку.
LENGTH(<текст>)LOWERПереводить текст у нижній регістр.
LOWER(<текст>)UPPERПереводить текст у верхній регістр.
UPPER(<текст>)INITCAPРобить першу літеру кожного слова великою, а решту — малими.
INITCAP(<текст>)TRIMПрибирає пробіли (або інші символи) на початку й у кінці рядка.
TRIM(<текст>)SUBSTRINGВирізає частину рядка: з потрібної позиції й потрібної довжини.
SUBSTRING(<текст> FROM <початок>)LEFTБере задану кількість символів з початку рядка.
LEFT(<текст>, <кількість>)RIGHTБере задану кількість символів з кінця рядка.
RIGHT(<текст>, <кількість>)POSITIONЗнаходить, з якого символу в рядку починається підрядок.
POSITION(<підрядок> IN <текст>)STARTS_WITHПеревіряє, чи починається рядок із заданого префікса.
STARTS_WITH(<текст>, <префікс>)REPLACEЗамінює в рядку всі входження одного тексту на інший.
REPLACE(<текст>, <що замінити>, <на що>)TRANSLATEЗамінює окремі символи на інші — кожен на свій, за один прохід.
TRANSLATE(<текст>, <які символи>, <на які>)REGEXP_LIKEПеревіряє, чи підходить рядок під регулярний вираз.
REGEXP_LIKE(<текст>, '<шаблон>')REGEXP_MATCHESВитягає з рядка частини, що підходять під регулярний вираз.
REGEXP_MATCHES(<текст>, '<шаблон>')REGEXP_SUBSTRПовертає перший фрагмент рядка, що підходить під регулярний вираз, — звичайним текстом.
REGEXP_SUBSTR(<текст>, '<шаблон>')REGEXP_REPLACEЗамінює частини рядка, що підходять під регулярний вираз.
REGEXP_REPLACE(<текст>, '<шаблон>', <на що>)SPLIT_PARTДілить рядок за роздільником і повертає частину з потрібним номером.
SPLIT_PART(<текст>, <роздільник>, <номер>)CONCATСклеює кілька значень в один рядок, пропускаючи NULL.
CONCAT(<значення1>, <значення2>, …)FORMATЗбирає рядок за шаблоном, підставляючи значення замість %s.
FORMAT('<шаблон>', <значення1>, <значення2>, …)LPADДоповнює рядок зліва до потрібної довжини.
LPAD(<текст>, <довжина>)RPADДоповнює рядок справа до потрібної довжини.
RPAD(<текст>, <довжина>)REPEATПовторює рядок задану кількість разів.
REPEAT(<текст>, <скільки разів>)REVERSEПеревертає рядок задом наперед.
REVERSE(<текст>)MD5Рахує MD5-хеш рядка — 32 шістнадцяткові символи.
MD5(<текст>)Дати й час
Обрізає дату й час до початку року, місяця, тижня, дня чи години.
DATE_TRUNC('<одиниця>', <момент>)DATE_BINОкруглює момент часу вниз до початку інтервалу довільної довжини: 15 хвилин, 6 годин, 10 днів.
DATE_BIN(INTERVAL '<крок>', <момент>, <точка відліку>)EXTRACTДістає з дати чи часу окрему частину: рік, місяць, день, годину.
EXTRACT(<частина> FROM <дата або час>)DATE_PARTДістає з дати чи часу окрему частину — те саме, що EXTRACT, але звичайною функцією.
DATE_PART('<частина>', <дата або час>)NOWПовертає поточні дату й час — момент, коли почалася транзакція.
NOW()CURRENT_DATEПовертає сьогоднішню дату — без часу.
CURRENT_DATEAGEРахує, скільки часу минуло між двома моментами, — у роках, місяцях і днях.
AGE(<пізніший момент>, <раніший момент>)MAKE_DATEСкладає дату з окремих чисел: року, місяця й дня.
MAKE_DATE(<рік>, <місяць>, <день>)MAKE_INTERVALСкладає інтервал з окремих чисел: років, місяців, днів, годин.
MAKE_INTERVAL(<одиниця> => <кількість>, …)TO_CHARПеретворює дату, час або число на текст у потрібному форматі.
TO_CHAR(<значення>, '<формат>')TO_DATEПеретворює текст на дату за вказаним форматом.
TO_DATE(<текст>, '<формат>')Типи
Перетворює значення з одного типу в інший: текст на число, текст на дату, число на текст.
CAST(<значення> AS <тип>)TO_NUMBERПеретворює на число текст, записаний «по-людськи»: з комами, знаком валюти.
TO_NUMBER(<текст>, '<формат>')GEN_RANDOM_UUIDСтворює випадковий UUID — унікальний ідентифікатор на кшталт 3f2c9a1e-….
GEN_RANDOM_UUID()Масиви й серії
Розбиває рядок за роздільником на масив частин.
STRING_TO_ARRAY(<текст>, <роздільник>)ARRAY_TO_STRINGСклеює елементи масиву в один рядок через роздільник.
ARRAY_TO_STRING(<масив>, <роздільник>)UNNESTРозгортає масив у рядки — по рядку на кожен елемент.
UNNEST(<масив>)CARDINALITYРахує, скільки елементів у масиві.
CARDINALITY(<масив>)ARRAY_LENGTHПовертає довжину масиву в заданому вимірі.
ARRAY_LENGTH(<масив>, <вимір>)ARRAY_POSITIONЗнаходить номер першого елемента масиву з заданим значенням.
ARRAY_POSITION(<масив>, <значення>)ARRAY_APPENDПовертає масив із доданим у кінець елементом.
ARRAY_APPEND(<масив>, <елемент>)ARRAY_REMOVEПовертає масив без усіх елементів із заданим значенням.
ARRAY_REMOVE(<масив>, <значення>)GENERATE_SERIESСтворює рядки з послідовністю чисел або моментів часу.
GENERATE_SERIES(<початок>, <кінець>)JSON
Перетворює значення — число, текст, масив чи цілий рядок таблиці — на JSON.
TO_JSONB(<значення>)JSONB_BUILD_OBJECTСкладає JSON-об'єкт із пар «ключ — значення».
JSONB_BUILD_OBJECT(<ключ1>, <значення1>, <ключ2>, <значення2>, …)JSONB_AGGЗбирає значення з багатьох рядків в один JSON-масив.
JSONB_AGG(<вираз>)JSONB_SETПовертає копію JSON з новим значенням за вказаним шляхом.
JSONB_SET(<json>, '{<шлях>}', <нове значення>)JSONB_EACHРозгортає JSON-об'єкт у рядки — по рядку на кожну пару «ключ — значення».
JSONB_EACH(<json-об'єкт>)JSONB_OBJECT_KEYSПовертає ключі JSON-об'єкта — по рядку на кожен.
JSONB_OBJECT_KEYS(<json-об'єкт>)JSONB_ARRAY_ELEMENTSРозгортає JSON-масив у рядки — по рядку на кожен елемент.
JSONB_ARRAY_ELEMENTS(<json-масив>)JSONB_PATH_QUERYДістає з JSON значення за виразом SQL/JSON path — зокрема з умовами.
JSONB_PATH_QUERY(<json>, '<шлях>')Повнотекстовий пошук
Агрегатні
Рахує рядки або значення, які не NULL.
COUNT(*)SUMДодає значення з багатьох рядків і повертає суму.
SUM(<вираз>)AVGРахує середнє арифметичне значень із багатьох рядків.
AVG(<вираз>)MINПовертає найменше значення серед рядків.
MIN(<вираз>)MAXПовертає найбільше значення серед рядків.
MAX(<вираз>)PERCENTILE_CONTЗнаходить медіану чи інший перцентиль — значення, нижче якого лежить задана частка даних.
PERCENTILE_CONT(<частка>) WITHIN GROUP (ORDER BY <вираз>)PERCENTILE_DISCЗнаходить перцентиль серед наявних значень — медіану, яка точно є в даних.
PERCENTILE_DISC(<частка>) WITHIN GROUP (ORDER BY <вираз>)BOOL_ANDПовертає true, якщо умова правдива для всіх рядків.
BOOL_AND(<умова>)BOOL_ORПовертає true, якщо умова правдива хоча б для одного рядка.
BOOL_OR(<умова>)STRING_AGGСклеює значення з багатьох рядків в один текст через роздільник.
STRING_AGG(<вираз>, <роздільник>)ARRAY_AGGЗбирає значення з багатьох рядків в один масив.
ARRAY_AGG(<вираз>)GROUPINGПоказує, чи є рядок підсумком ROLLUP чи CUBE для стовпця: 1 — підсумок, 0 — звичайна група.
GROUPING(<стовпець>)Віконні
Нумерує рядки 1, 2, 3… у заданому порядку — у всьому результаті або в кожній групі.
ROW_NUMBER() OVER (ORDER BY <критерій>)RANKСтавить місця з урахуванням рівних: однакові значення ділять місце, а наступне пропускається.
RANK() OVER (ORDER BY <критерій>)DENSE_RANKСтавить місця з урахуванням рівних, але без пропусків: 1, 2, 2, 3.
DENSE_RANK() OVER (ORDER BY <критерій>)PERCENT_RANKПоказує відносне місце рядка від 0 до 1: яка частка інших рядків стоїть перед ним.
PERCENT_RANK() OVER (ORDER BY <критерій>)CUME_DISTПоказує частку рядків, що стоять перед поточним або рівні з ним, — від 0 до 1.
CUME_DIST() OVER (ORDER BY <критерій>)NTILEДілить рядки на задану кількість груп приблизно однакового розміру й нумерує групи.
NTILE(<кількість груп>) OVER (ORDER BY <критерій>)LAGБере значення з попереднього рядка, щоб порівняти з поточним.
LAG(<вираз>) OVER (ORDER BY <критерій>)LEADБере значення з наступного рядка, щоб порівняти з поточним.
LEAD(<вираз>) OVER (ORDER BY <критерій>)FIRST_VALUEБере значення з першого рядка вікна.
FIRST_VALUE(<вираз>) OVER (ORDER BY <критерій>)LAST_VALUEБере значення з останнього рядка вікна — але лише з правильною рамкою.
LAST_VALUE(<вираз>) OVER (
ORDER BY <критерій>
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
)NTH_VALUEБере значення з N-го рядка вікна: другого, третього…
NTH_VALUE(<вираз>, <номер>) OVER (
ORDER BY <критерій>
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
)