SQLсервер в Linux -самостоятельное освоение пакета

         

Агрегатные функции



Агрегатные функции

Агрегатными функциями называется особый класс функций, применяемых сразу к нескольким записям набора данных, но возвращающим одно значение. Обычно агрегатные функции используются в запросах с группировкой по критерию, заданному в секции GROUP BY, но также встречается их применение в запросах, у которых целевой список состоит только из агрегатных функций. В этом случае агрегатная функция обрабатывает все записи итогового набора.

В табл. 5.16 перечислены агрегатные функции, поддерживаемые в PostgreSQL. Полный список агрегатных функций выводится в psql командой \da.



Агрегатные выражения



Агрегатные выражения

При вызове агрегатной функции передается агрегатное выражение, применяемое к записям, созданным командой SELECT. По своей структуре агрегатные выражения сходны с обычными выражениями SQL, но они могут начинаться с ключевого слова ALL или DISTINCT.

Если задано ключевое слово DISTINCT, функция обрабатывает только группы с уникальными значениями агрегатного выражения; группы с повторяющимися значениями игнорируются. Ключевое слово ALL, как и в команде SELECT, всего лишь явно указывает на тот факт, что выражение относится ко всем группам. В листинге 5.19 приведены примеры разных форм агрегатных выражений.



Числовые операторы



Числовые операторы

Числовые операторы PostgreSQL делятся на три категории.

Математические операторы выполняют математическую операцию с одним или двумя операндами и возвращают значение числового типа. Операторы сравнения проверяют заданное соотношение между двумя числовыми величинами (например, что одна величина больше другой) и возвращают результат проверки в виде типа boolean. Двоичные операторы работают на уровне отдельных битов, то есть единиц и нулей в двоичном представлении.

Ниже приведены более подробные описания по всем трем категориям.





Двоичные операторы



Двоичные операторы

Двоичные операторы выполняют поразрядные операции с битовыми последовательностями или целыми числами, что обычно приводит к изменению их значений. Двоичные операторы PostgreSQL перечислены в табл. 5.6.



Функции



Функции

Функция представляет собой идентификатор, используемый в PostgreSQL для выполнения программных операций в командах SQL. Функции всегда возвращают одно значение, применяемое в команде SQL, из которой была вызвана функция. Происходящее отчасти напоминает возврат значения оператором, вызванным из запроса; более того, с технической точки зрения оператор представляет собой указатель на встроенную системную функцию. Таким образом, операторы можно рассматривать как удобную форму записи, упрощающую вызов системных функций.




Функции для работы с датой и временем



Функции для работы с датой и временем

В PostgreSQL поддерживаются как стандартные функции SQL current_date, current_time и current_timestamp, так и множество нестандартных функций. Функции PostgreSQL, предназначенные для работы с датой и временем, перечислены в табл. 5.11.



Функции преобразования типа



Функции преобразования типа

Хотя PostgreSQL позволяет выполнять явные преобразования между основными типами данных, некоторые преобразования удобнее выполнять при помощи функций. В табл. 5.13 перечислены основные функции преобразования типов PostgreSQL, а ниже приводятся их подробные описания.



Использование функций



Использование функций

При вызове функции в команде SQL указывается имя функции, после которого в круглых скобках перечисляются аргументы. Существует два основных стиля передачи аргументов. Стандартные функции SQL92 обычно реализуются так, что их аргументы разделяются специальными ключевыми словами SQL (такими, как FROM, FOR и USING). С другой стороны, функции в стиле PostgreSQL получают аргументы, разделенные запятыми (вероятно, программисту с опытом программирования на С этот способ покажется более привычным).

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

функция_в_стиле_sq192 ( { аргумент \ КЛЮЧЕВОЕ_СЛОВО } [.:.] )

ipyHKuHz_Bj:THnej)gsql92 ( аргумент [, ...] )

ВНИМАНИЕ

Круглые скобки не обязательны только для функций SQL92 current_date, current_t1me и current_timestamp. В PostgreSQL эти функции также вызываются без круглых скобок, чтобы обеспечить совместимость со спецификацией SQL92.

Вызовы функции могут быть вложенными — при условии, что тип данных, возвращаемый внутренней функцией, совместим с типом соответствующего аргумента внешней функции. Допускается вложение вызовов на произвольную глубину:

имя_функции (имя_вложенной_функции (аргументы [. ... ] ) [. ...] )

В PostgreSQL существует множество стандартных функций, работающих со встроенными типами данных. Полный список функций выводится командой \df в клиенте psql. Кроме того, в PostgreSQL поддерживается возможность определения пользовательских функций при помощи команды CREATE FUNCTION. За дополнительной информацией обращайтесь к главе 7.

Примечание 1
Примечание 1

По умолчанию полям в целевом списке, значение которых определяется функцией, назначается синоним в виде имени функции без круглых скобок и без аргументов (например, to_char).




Конкатенация



Конкатенация

Оператор конкатенации (11) играет очень важную роль при форматировании выходных данных. Как и все операторы, он может использоваться в командах SQL всюду, где могут использоваться константы. Допускается последовательная конкатенация строковых значений, для этого перечисляемые строковые константы или идентификаторы разделяются операторами 11.

Например, оператор конкатенации может использоваться в секции WHERE для фильтрации записей на основании сравнения с символьной строкой. Пример приведен в листинге 5.4.



Правильное использование



Листинг 5.1. Правильное использование математического оператора

booktown=# SELECT id 1 AS id_p1us_one. 1ast_name

booktown-# FROM authors

booktown-# ORDER BY id DESC LIMIT 5;

id_plus_one j last_name

25042 Bianco 15991 | Bourgeois

7807 | Christiansen

7806 | Lutz

4157 I King

(5 rows)

Попытка сложения несовместимых типов продемонстрирована в листинге 5.2.



Неверное использование операторов



Листинг 5.2. Неверное использование операторов

booktown=# SELECT id + lastjiame AS mistake

booktown-# FROM authors:

ERROR: Unable to identify an operator '+' for types 'int4' and 'text' You will have to retype this query using an explicit cast

К счастью, в сообщениях о недопустимом использовании операторов в PostgreSQL указывается причина ошибки. Эта информация поможет вам устранить ошибку и внести необходимые исправления в команду.



Сравнение строк



Листинг 5.3. Сравнение строк

booktown=# SELECT title FROM books

booktown=# WHERE substrCtitle, 1, 1) < 'D1;

title

2001: A Space Odyssey

Bartholomew and the Oobleck

(2 rows)



Конкатенация строк



Листинг 5.4. Конкатенация строк

booktown=# SELECT 'The Title: ' | title || ', by ' |

booktown-# first_name || ' ' II lastjiame AS bookjinfo

booktown-# FROM books NATURAL JOIN authors AS a (authorjd) LIMIT 3;

book_info

The Title: The Shining, by Stephen King

The Title: Dune, by Frank Herbert

The Title: 2001: A Space Odyssey, by Arthur C. Clarke

(3 rows)



Поиск по регулярному выражению



Листинг 5.5. Поиск по регулярному выражению

booktown=# SELECT first_name, last_name

booktown-# FROM authors

booktown-# WHERE firstjiame - "AT1;

fi rstjiame lastjiame

Ariel Denham Tom Christiansen

Arthur C. | Clarke Andrew Brookins

Theodor Seuss j Geisel (5 rows)

Символ ~ в секции WHERE является оператором регулярного выражения, а само регулярное выражение задается строкой ЛА| ЛТ. В него входят специальные символы (метасимволы) л и |, а также литералы А и Т. Метасимволы регулярных выражений описаны ниже в этом пункте.

Важнейшее различие между функцией 11 ke() и операторами регулярных выражений заключается в том, что функция likeO ищет совпадение для всей строки, а операторы регулярных выражений ищут совпадение в произвольной позиции заданной строки, если только в самом регулярном выражении не указано обратное.

Операторы регулярных выражений перечислены в табл. 5.2. Их операндами всегда являются строка с регулярным выражением и текст, в котором ищется совпадение (идентификатор или константа). Все операторы регулярных выражении

возвращают результат логического типа, интерпретация которого зависит от специфики самого оператора.



Простой поиск соответствия



Листинг 5.6. Простой поиск соответствия

booktown=# SELECT title FROM books

booktown-# WHERE title - 'The';

title

The Shining The Cat in the Hat The Velveteen Rabbit

The Tell-Tale Heart

(4 rows)

booktown=# SELECT title FROM books

booktown-f WHERE title -* 'The'; title

The Shining The Cat in the Hat Bartholomew and

the Oobleck Franklin in the Dark The Velveteen Rabbit

The Tell-Tale Heart

(6 rows)

Как видно из результатов, оператор ~* возвращает две дополнительные записи, поскольку выражение соответствует не только подстроке «the», но и любым модификациям в регистре символов этой подстроки (the, tHe, ThE и т. д.).

Если добавить в начало этого регулярного выражения символ л, оно будет соответствовать только подстроке «The», находящейся в начале исходного текста (листинг 5.7).

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



Нетривиальный поиск соответствия



Листинг 5.7. Нетривиальный поиск соответствия

booktown=f SELECT title FROM books

booktown-# WHERE title -* IAThe.*(rabbit|heart)';

title

The Velveteen Rabbit The Tell-Tale Heart

(2 rows)

Выражение AThe.*(rabbit|heart) означает следующее: соответствие находится лишь в том случае, если строка начинается с символов «The», далее идет любое количество произвольных символов, а после них следует либо подстрока «rabbit», либо подстрока «heart». Оператор ~* (вместо оператора ~) производит сравнение без учета регистра символов.

В листинге 5.8 приведен пример еще более сложного регулярного выражения.



Сложный поиск соответствия



Листинг 5.8. Сложный поиск соответствия

booktown=# SELECT title FROM books

booktown-# WHERE title ~* 'rt.*[ri]t) | (ingJjune$)' :

title

The Shining Dune

The Velveteen Rabbit The Tell-Tale Heart

(4 rows)

booktown=#

На первый взгляд регулярное выражение в листинге 5.8 выглядит устрашающе. Но если разбить его на элементы, становится видно, что оно состоит из двух выражений в круглых скобках, разделенных символом [.Таким образом, соответствие будет найдено, если хотя бы одно из этих выражений указывает на значение в поле title.

Продолжая анализ выражения, мы видим, что подвыражение слева от символа | состоит из следующих элементов (слева направо): метасимвол л, за которым следует символ t, затем последовательность .* и пара квадратных скобок с символами г и i, за которыми следует символ t. В переводе на русский язык это означает, что соответствие должно начинаться с буквы t, за которой следует ноль или более символов, пока не будет встречена буква г или 1, после которой немедленно следует буква t. Если хотя бы одно из этих условий не соблюдается, соответствия нет.

Выражение в правой части устроено проще. Оно состоит из двух литералов ing и une, разделенных очередным символом , причем за каждым литералом следует символ $. В переводе это означает, что совпадение должно заканчиваться подстрокой Ing или une. При выполнении любого (благодаря символу |) из этих условий соответствие считается найденным.



Использование математических операторов



Листинг 5.9. Использование математических операторов

booktown=# SELECT isbn,

booktown-# (retail / cost)::numeric(3, 2) - 1 AS margin

booktown-# FROM stock

booktowri-# ORDER BY margin DESC

booktown-# LIMIT 4;

isbn | margin

0451457994 | 0.35

0760720002 | 0.33

0451198492 0.30

0441172717 | 0.29

(4 rows)

Обратите внимание на определение временного псевдонима margin при помощи ключевого слова AS. Псевдоним представляет собой временное имя, которое существует только во время обработки запроса.



Использование операторов сравнения



Листинг 5.10. Использование операторов сравнения

booktown=# SELECT isbn, stock booktown-# FROM stock

booktown-# WHERE retail <= 25

booktown-# AND stock != 0:

isbn | stock

0441172717 | 77

0590445065 | 10

0679803335 | 18

0760720002 | 28

09296C5942 | 25

1885418035 | 77

(6 rows)



Ключевое слово BETWEEN



Листинг 5.11. Ключевое слово BETWEEN

booktown=# SELECT isbn FROM stock

booktown-# WHERE cost BETWEEN 10 AND 17;

isbn

0394800753 0441172717 0451457994

(3 rows)

Аналогичного результата можно добиться и при помощи оператора <= в сочетании с оператором >
= (листинг 5.12).



Имитация ключевого



Листинг 5.12. Имитация ключевого слова BETWEEN при помощи операторов

booktown=# SELECT isbn FROM stock

booktown-# WHERE cost >
= 10 AND cost <= 17; isbn

0394800753 0441172717 0451457994

(3 rows)

В варианте с ключевым словом BETWEEN команда выглядит более понятной. Впрочем, для PostgreSQL оба варианта эквивалентны, поэтому выбор зависит от личных предпочтений программиста.



Сдвиг битовых последовательностей



Листинг 5.13. Сдвиг битовых последовательностей

booktown=# SELECT b'1000' » 2 AS "8 shifted right".

booktown-# Mttoint4(b'1000' » 2) AS integer.

booktown-# 8 » 2 AS likewise;

8 shifted right | integer | likewise

0010 I 2 I 2

(1 row)

Примечание 2
Примечание 2

При сдвиге битовых последовательностей исходная длина строки не изменяется, а разряды, выходящие за левый или правый край последовательности, отсекаются. При использовании операторов &, | или # битовые операнды должны иметь одинаковую длину.



Объединение условий



Листинг 5.14. Объединение условий с использованием логических операторов

booktown=# SELECT isbn, cost, stock

booktown-# FROM stock

booktown-# WHERE cost >
30

booktown-# OR stock = 0:

Isbn cost | stock

0394900014 23.00 | 0

044100590X | 36.00 | 89

0451198492 | 36.00 | 0

0451457994 17.00 j 0 (4 rows)

booktown=# SELECT Isbn, cost, stock

booktown-# FROM stock

booktown-# WHERE cost >
30

booktown-# AND stock = 0;

Isbn | cost stock

0451198492 36.00 0

(1 row)



Проверка с использованием конструкции IS NULL



Листинг 5.15. Проверка с использованием конструкции IS NULL

booktown=# SELECT lastjiame, firstjiame

booktown-l FROM authors

booktown-* WHERE firstjiame IS NULL;

lastjiame fi rstjname

Geisel

(1 row)

При сравнении команд в листингах 5.15 и 5.16 может показаться, что эти два варианта синтаксиса идентичны. Тем не менее между ними существует принципиальное различие.



Сравнение со значением NULL



Листинг 5.16. Сравнение со значением NULL

booktown=# SELECT lastjiame, firstjiame

booktown-l FROM authors

booktown-f WHERE firstjiame = NULL:

lastjiame | fi rstjname

Geisel |

(1 row)

В PostgreSQL условие = NULL преобразуется в IS NULL, а условие != NULL преобразуется в IS NOT NULL. Это сделано только для совместимости с существующими клиентскими приложениями (например, Microsoft Access).

Тем не менее при сравнении значений с NULL вместо математических операторов = и != рекомендуется использовать конструкции IS NULL и NOT IS NULL. В настоящее время использование математических операторов = и != для сравнения со псевдозначениями NULL допускается ради совместимости с другими системами, но в будущем эта поддержка может быть ликвидирована, поскольку она не предусмотрена в стандарте SQL. По той же причине она не гарантирована в других СУБД на базе SQL.

Все остальные операторы сравнения для операнда NULL возвращают NULL, поскольку NULL никогда не бывает больше или меньше другой величины, отличной от NULL (листинг 5.17). NULL можно рассматривать как своего рода «черную дыру» в мире SQL — для этого псевдозначения ни один оператор сравнения (кроме IS NULL и специального оператора преобразования =) не возвращает true; NULL не может участвовать в операциях сложения, конкатенации и т. д.



Операторы и псевдозначение NULL



Листинг 5.17. Операторы и псевдозначение NULL

booktown=# \pset null *nu11* Null display is

booktown=# SELECT 5 >
NULL;

?column?

*null*

(1 row)

booktown=# SELECT NULL IS NULL;

? column?

t (1 row)

booktown=# SELECT NULL || 'Test'; ?column?

*null*

(1 row)



Приоритет операторов



Листинг 5.18. Приоритет операторов

booktown=# SELECT 60 + 12 * 5

AS "sixty plus twelve times five",

booktown-# 12 + 60 * 5

AS "twelve plus sixty times five";

sixty plus twelve times five |

twelve plus sixty times five

120 | 312

(1 row)

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

В табл. 5.8 перечислены группы операторов PostgreSQL в порядке убывания их приоритета.



Использование агрегатных выражений



Листинг 5.19. Использование агрегатных выражений

booktown=# SELECT count(location) AS setjocations,

booktown-# count(ALL location) AS all_set_locations,

booktown-# count(DISTINCT location) AS unique_locations,

booktown-# count(*) AS all_rows booktown-# FROM subjects;

setjocations | all_set_locations | uniquejocations all_rows

15 15 | 7 16

(1 row)

У агрегатных выражений также имеется специальная форма, продемонстрированная в столбце al l_rows выходных данных листинга 5.19. Если при вызове агрегатной функции передается звездочка (*), это означает, что функция должна обрабатывать все поля, в том числе и обычно игнорируемые поля со значениями NULL. Поскольку таблица subjects содержит одну запись с полем location, равным NULL, результат подсчета записей по полю 1 ocati on отличается от результата подсчета по тому же нолю с использованием символа *.

ВНИМАНИЕ

Записи, у которых в агрегатное выражение входит NULL, не обрабатываются агрегатными функциями (исключением является функция count().

avg()

Синтаксис: avg(выражение)

Функция avg() получает агрегатное выражение, результат которого относится к любому из числовых типов (numeric, bigint, smallint, real или double precision) или к типу interval.

Функция возвращает среднее арифметическое всех данных, описываемых выражением. Возвращаемое значение относится к типу numeric для выражения типа integer или к типу double precision для выражения типа real. В остальных случаях тип возвращаемого значения совпадает с типом выражения.



Логические операторы



Логические операторы

Ключевые слова AND, OR и NOT являются логическими (булевыми) операторами PostgreSQL. Обычно они используются для операций с логическими условиями в командах SQL, особенно в секциях WHERE и HAVING.

В табл. 5.7 приведена сводка результатов, возвращаемых логическими операторами AND, OR и NOT для всех возможных сочетаний операндов (true, false и NULL).



Математические функции



Математические функции

Математические функции PostgreSQL выполняют стандартные арифметические и тригонометрические операции и работают с разными типами данных. В большинстве случаев тип возвращаемого значения совпадает с типом аргументов функции. В табл. 5.9 приведена сводка основных математических функций PostgreSQL.



Математические операторы



Математические операторы

Математические операторы используются в целевых списках, в секции WHERE команды SELECT и вообще везде, где встречаются числовые данные.

В табл. 5.4 перечислены математические операторы PostgreSQL и приведены примеры их использования.



Операторы и функции



Операторы и функции

В этой главе рассматриваются операторы и функции PostgreSQL, то есть специальные символы и идентификаторы, предназначенные для модификации и сравнения данных в командах SQL. Результаты этих операций находят разнообразное применение, от обновления существующих записей в базе данных до ограничения результатов выборки по определенному критерию.

В PostgreSQL поддерживаются стандартные операторы и функции SQL, определенные в стандартах ANSI/ISO, — математические операторы, основные функции форматирования текста, выделение компонентов даты/времени и т. д. Кроме того, в PostgreSQL реализованы многочисленные нестандартные расширения, в том числе операторы поиска по регулярным выражениям и универсальная функция форматирования данных to_char().

Ниже описаны встроенные операторы и функции. Одной из замечательных особенностей языка PostgreSQL является возможность его расширения в этой области. Когда вы освоите стандартные операторы и функции, вероятно, вам захочется определить свои собственные. Эта тема рассматривается в главе 7.




Операторы и NULL



Операторы и NULL

Если таблица содержит значения NULL, можно воспользоваться специальными операторами сравнения, чтобы учесть поля NULL при выборке или игнорировать их. Конструкция IS NULL проверяет, содержит ли поле значение NULL. Обратное условие проверяется конструкцией NOT IS NULL.

В листинге 5.15 конструкция IS NULL используется для поиска авторов, у которых отсутствуют данные в поле f 1 rst_name.



Операторы регулярных выражений



Операторы регулярных выражений

Если обычного сравнения строк оказывается недостаточно, в PostgreSQL предусмотрены специальные операторы для поиска совпадений по регулярным выражениям. Регулярное выражение похоже на строковую константу, с которой сравнивается исходная строка, но некоторые символы (квадратные скобки, вертикальная черта, обратная косая черта и т. д.) при сравнении интерпретируются особым образом. Если вам доводилось работать с такими программами Unix, как sed, grep или perl, возможно, вы уже знакомы с синтаксисом регулярных выражений.

Примечание 2
Примечание 2

Общие сведения о регулярных выражениях приведены в книге Джеффри Фридла (Jeffrey Friedl) «Mastering Regular Expressions».

Регулярное выражение состоит из литералов и метасимволов (специальных символов). Обычно регулярные выражения могут совпадать с несколькими вариантами строковых значений. Пример приведен в листинге 5.5, где в таблице authors ищутся все имена (fi rstjiame), начинающиеся с символа А или Т.



Операторы сравнения



Операторы сравнения

Операторы сравнения работают со значениями таких типов, как integer или text, но всегда возвращают результат типа boo"! ean. Они часто встречаются в секции WHERE, но могут использоваться в любом контексте, в котором действителен тип boolean. Операторы сравнения PostgreSQL перечислены в табл. 5.5.



Операторы



Операторы

В главе 3 операторы SQL определялись как лексемы, предназначенные для выполнения операций с константами и идентификаторами и возвращающие результаты этих операций. Некоторые ключевые слова SQL тоже считаются операторами из-за воздействия на данные в командах SQL. В этом разделе термином «операторы» будут обозначаться как специальные символы, так и ключевые слова. Действия, выполняемые оператором, зависят от контекста его применения. Область применения операторов чрезвычайно широка, от выполнения математических операций и конкатенации строк до разнообразных сравнений. В следующем подразделе описываются общие правила применения операторов SQL, а далее подробно рассматриваются некоторые важнейшие категории операторов:

строковые операторы; числовые операторы; логические операторы.

Примечание 1
Примечание 1

Самый «свежий» и наиболее полный список операторов PostgreSQL выводится в psql командой \do. Помните, что многие из перечисленных операторов существуют только в PostgreSQL и могут не поддерживаться в других СУБД на базе SQL.

После описания различных категорий операторов приводится информация о роли псевдозначений NULL в выражениях и о порядке выполнения операторов.




Правила использования операторов



Правила использования операторов

Оператор работает с одним операндом или с двумя операндами. Большинство операторов работает с двумя операндами, между которыми ставится сам оператор (например, а-b). Такие операторы называются бинарными. Операторы, работающие с одним операндом, называются унарными; в этом случае оператор либо предшествует операнду, либо следует за ним (например, знак @ перед значением является унарным оператором, возвращающим модуль числа).

Некоторые операторы имеют несколько интерпретаций в зависимости от типа данных, к которым они применяются. С другой стороны, часть операторов не имеет смысла для некоторых типов данных (дополнительная информация о типах данных PostgreSQL приведена в главе 3).

Например, оператор сложения (+) может использоваться для суммирования двух целочисленных величии, но он не может прибавить целое число к текстовой строке. Считается, что такой вариант использования оператора дает неопределенный результат и потому является недопустимым. При этом сам оператор (в данном случае +) опознается нормально, но PostgreSQL выводит сообщение об ошибке (вроде того, что приведено в листинге 5.2).

Для примера рассмотрим таблицу authors, связывающую имена авторов с числовыми кодами.

Таблица "authors"

Атрибут | Тип | Модификатор

id | integer not null

lastjiame j text firstjname 1 text

Индекс: authors_pkey

Код автора id относится к типу integer (4-байтовое целое), а фамилия автора — к типу text. Поскольку поле id относится к числовому типу, оно может использоваться в качестве операнда математического оператора с другим числовым значением.

В листинге 5.1 приведен пример правильного использования оператора сложения (+).



возвращает арккосинус аргумента х, относящегося


testdb=# SELECT abs(lOO) AS abs_positive.
testdb-# abs(-lOO) AS absjiegative:
abs_positive | absjiegative
100 100
(1 row)
acos()
Синтаксис:
acos(x)
Функция acos () возвращает арккосинус аргумента х, относящегося к типу doubl e precision и лежащему в интервале допустимых значений косинуса (от -1 до 1). Фактически является обратной по отношению к функции cos(). Результат представляет собой угол (в радианах) в интервале от 0 до я, выраженный типом double precision.

Функция получает один или два


booktown=# SELECT asciitТ); ascii
84
(1 row)
booktown=# SELECT DISTINCT ON (substr)
booktown-# title. substrCtitle, 1, 1),
booktown-# ascii(tltle)
booktown-# FROM books
booktOMl-f ORDER BY substr ASC:
title | substr ascii
2001: A Space Odyssey | 2 | 50
Bartholomew and the Oobleck j В I 66
Dune |D 68
Franklin in the Dark | 70
Goodnignt Moon | G j 71
Little Women L 76
Practical PostgreSQL | P j 80
The Shining Т 84
(8 rows)
btrim()
Синтаксис:
btrim(s) btrim(s. t)
Функция получает один или два аргумента типа text, второй аргумент t не является обязательным. Если аргумент t задан, функция удаляет в начале и в конце строки s все символы, входящие в строку t. Если функция вызвана с одним аргументом, удаляются начальные и конечные пропуски — пробелы, символы табуляции и т. д.
Порядок перечисления символов в строке t для функции btrim() значения не имеет. В начале и конце строки s удаляются подстроки, полностью состоящие из символов, входящих в строку t.

Функция current_time вызывается без аргументов


booktown=# SELECT current_date,
booktown-# 'now'::date AS date;
date date
2001-08-31 | 2001-08-31
(1 row)
current_time
Синтаксис:
current_time
Функция current_time вызывается без аргументов и возвращает текущее время в виде значения типа time. Результат эквивалентен преобразованию специальной константы now к типу time.

фактически является обратной по отношению


booKtown=# SELECT bitfronrint4(16385);
bitfromint4
00000000000000000100000000000001
(1 row)
bittoint4()
Синтаксис:
bittoint4(b)
Функция bittoint4() фактически является обратной по отношению к bitfromint4() — она получает один аргумент b тина bit п возвращает его десятичное числовое значение в виде тина integer.
Соответственно аргумент функции bitfrwint4() содержит до 32 двоичных цифр, а возвращаемое значение лежит в интервале от -2 147 483 648 до 2 147 483 647.

возвращает арксинус аргумента х, относящегося


testdb=# SELECT acos(l). acos(O),
acos(-l). testdb-# acos(cosd)) AS inverse_example:
acos | acos | acos | inverse_example
0 | 1.5707963267949 | 3.14159265358979 |
(1 row)
asin()
Синтаксис:
asln(x)
Функция as1n() возвращает арксинус аргумента х, относящегося к типу double jrecisi on и лежащему в интервале допустимых значений синуса (от -1 до 1). Факти-lecKii является обратной по отношению к функции sin(). Результат представляет со-юй угол (в радианах) в интервале от -я/2 до л/2, выраженный типом doubl e preci s I on.