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

         

e preci si on, представляющий


testdb=# SELECT round(l.O) AS one,
testdb-# round(l.l) AS "one point one",
testdb | round(1.5) AS "one point five",
testdb-# roundd.8) AS "one point eight";
one | one point one |
one point five | one point eight
1 | 1 | 2 | 2
(1 row)
testdb=# SELECT round(1.4949. 1) AS one_digit_scale.
testdb-# roundd.4949, 3) AS three_digit_scale.
testdb-# roundd.4949, 10) AS ten_digit_scale.
testdb-# roundd.4949. 0) AS rounded;
one_digit_scale | three_digit_scale | ten_digit_scale rounded
1.5 1.495 | 1.4949000000 1
(1 row)
Sin()
Синтаксис:
Sin(x)
Функция si n () получает один аргумент х типа doubl e preci si on, представляющий угол в радианах, и возвращает синус этого угла в виде значения типа doubl e preci si on.

х типа double precision или




testdb=# SELECT sin(pi() / 4) AS quarter_pi,
testdb-# sin(pi() / 2) AS half_pi:
quarter_pi | half_pi
0.707106781186547 |
(1 row)
sqrt()
Синтаксис:
sqrt()
Функция sqrt() получает один числовой аргумент х типа double precision или lumeric и возвращает квадратный корень, при этом тип возвращаемого значения ювпадает с типом аргумента. Фактически является обратной по отношению к Ьункции pow(), выполняющей возведение во вторую степень.

e preci si on, представляющий


estdb=# SELECT sqrt(2.0), sqrt(4.0),
estdb-# sqrt(pow(2.0, 2)) AS inverse_example:
sqrt | sqrt | inverse_exampl
1.4142135623731 2 | 2
(1 row)
tan()
Синтаксис:
tan(x)
Функция tan() получает один аргумент х типа doubl e preci si on, представляющий тол в радианах, и возвращает тангенс этого угла в виде значения типа doubl e preci s i on.

с двумя аргументами. Первый аргумент


testdb=# SELECT tan(pi() / 8).
testdb-# tan(O): tan | tan
0.414213562373095 |
(1 row)
trunc()
Синтаксис:
trunc(x) trunc(x.s)
Функция trunc() вызывается с одним или с двумя аргументами. Первый аргумент х относится к типу numeric или double precision и определяет исходное число. Второй необязательный аргумент s относится к типу integer и определяет количество цифр в дробной части после усечения.
Если аргумент s не задан, отсекаются все цифры в дробной части числа. Если значение аргумента s больше количества цифр в дробной части х, недостающие позиции заполняются нулями.

AS one_decima1_point,


testdb=# SELECT trunc(1.598) AS natural-truncation.
testdb-# trunc(1.598. 1) AS one_decima1_point,
testdb-# trunc(1.598, 8) AS extra_places:
natural_truncation one_decimal_point | extra_places
1 | 1.5 | 1.59800000
(1 row)

Функция initcapO получает один аргумент


booktowrHf SELECT chr(65), ascii('A');
chr ! ascii
A | 65
(1 row)
initcap()
Синтаксис: initcap(s)
Функция initcapO получает один аргумент s типа text, преобразует первые буквы всех слов к верхнему регистру и возвращает полученную строку. В данном контексте «словом» считается любая последовательность символов, отделенная от других слов пробелами.

получает один аргумент типа text,


booktown=# SELECT * FROM books
booktown-# WHERE title LIKE ('XRabbit1):
id i title | authorjd subjectjd
1234 | The Velveteen Rabbit | 25041 | 3
(1 row)
booktown=# SELECT * FROM books
booktown-# WHERE title LIKE
id | title | authorjd | subjectjd
4513 | Dune | 1866 | 15
25908 | Franklin in the Dark | 15990 | 2 (2 rows)
booktown=# SELECT * FROM books
booktown-# WHERE title ILIKE '«python*':
id | title | authorjd | subjectjd
41473 | Programming Python | 7805 | 4 41477
Learning Python | 7805 4
(2 rows)
lower()
Синтаксис: lower(s)
Функция SQL92 1 ower () получает один аргумент типа text, преобразует все символы строки к нижнему регистру и возвращает полученную строку в виде значения типа text.

The Cat in the Hat


booktown=# SELECT ItrimC whitespace example'):
Itrim
whitespace example (1 row)
booktown=# SELECT title. ItrimCtitle, 'TD2he ')
booktown-# FROM books booktown-# LIMIT 4:
title | Itritn
The Shining | Shining
Dune I une
2001: A Space Odyssey | 001: A Space Odyssey
The Cat in the Hat j Cat In the Hat
(4 rows)
octet_length()
Синтаксис: octetjength(s)
Функция SQL92 octetj ength() получает один аргумент s типа text, varchar или character и возвращает длину полученной строки в байтах. Возвращаемое значение относится к типу integer.
В большинстве случаев длина строки в байтах совпадает с количеством символов, хотя в расширенных кодировках не всегда, поскольку в них символ по определению может состоять из нескольких байтов.
Пример
booktown=# SELECT title, octetjength(title)
booktown-# FROM books
booktown-# ORDER BY title ASC
booktown-# LIMIT 3:
title octet Jength
2001: A Space Odyssey | 21
Bartholomew and the Oobleck | 27
Dune | 4
(3 rows)
position()
Синтаксис: position(b IN s)
Функция SQL92 position^) получает два аргумента, относящихся к типу text, и возвращает начальную позицию подстроки b в строке s (отсчет начинается с 1). Возвращаемое значение относится к типу i nteger. Если подстрока не найдена, функция возвращает 0.

The Cat in the Hat


booktown=# SELECT rtrimC'whitespace example ');
rtrim
whitespace example
(1 row)
booktown=# SELECT title, rtrinKtitle, 'yes')
booktown-# FROM books
booktown-# LIMIT 4;
title rtrim
The Shining | The Shining
Dune Dun 2001: A Space Odyssey 2001: A Space Od
The Cat in the Hat j The Cat in the Hat
(4 rows)
strpos()
Синтаксис: strpos(s. b)
Функция strposO эквивалентна функции SQL92 positionO, но аргументы передаются ей в стиле С. Функция получает два аргумента, относящихся к типу text, и возвращает начальную позицию подстроки b в строке s (отсчет начинается с 1). Возвращаемое значение относится к типу 1 nteger. Если подстрока не найдена, функция возвращает 0.

Tale Heart Heart The Shining


booktown=# SELECT title, substring(title FROM 15)
booktown-# FROM books
booktown-* ORDER BY title DESC
booktown-# LIMIT 3;
title | substring
The Velveteen Rabbit | Rabbit
The Tell- Tale Heart Heart The Shining
(3 rows)
booktown=# SELECT title, substring(title FROM 5 FOR 9)
booktown-# FROM books
booktown-# ORDER BY title DESC booktown-# LIMIT 3;
title | substring
The Velveteen Rabbit Velveteen
The Tell-Tale Heart Tell-Tale
The Shining | Shining
(3 rows)
to_ascii()
Синтаксис:
to_ascii(s, f)
Функция to_asci i () получает строковый аргумент s, относящийся к типу text, и обозначение расширенной кодировки f, а возвращает обычный ASCII-текст в виде значения типа text.
Допустимы следующие обозначения расширенных кодировок: LATIN1 (ISO 8859-1), LATIN2 (ISO 8859-2) и WIN1250 (Windows CP1250 или WinLatin2). Для работы функции необходима поддержка расширенных кодировок (устанавливается при помощи ключа командной строки компилятора при установке PostgreSQL).

получает один аргумент типа text,


booktowrH1 SELECT isbn, trim(LEADING '0' FROM isbn)
booktown-# FROM editions booktown-# LIMIT 2; isbn | Itrim
039480001X 39480001X 0451160916 451160916
(2 rows)
booktown=# SELECT isbn, trimCTRAILING 'X' FROM isbn)
booktown-# FROM editions booktown-# LIMIT 2;
1Sbn rtrim
039480001X j 039480001 0451160916 j 0451160916
(2 rows)
booktowrHf SELECT isbn, trimCBOTH 'OX' FROM isbn)
booktown-# FROM editions booktown-# LIMIT 2; isbn I btrim
039480001X | 39480001 0451160916 | 451160916
(2 rows)
upper()
Синтаксис:
upper(s)
Функция SQL92 upper() получает один аргумент типа text, преобразует все символы строки к верхнему регистру и возвращает полученную строку в виде значения типа text.

s определяет компонент, до которого


booktown=# SELECT date_part('minute'.
booktown(# intervalC3 days 4 hours 12 minutes')):
date_part
12
(1 row)
booktown=# SELECT isbn,
booktown-l date_part('year', publication)
booktown-# FROM editions
booktown-# ORDER BY date_part ASC
booktown-# LIMIT 3;
isbn | date_part
0760720002 | 1868
0679803335 | 1922
0694003611 | 1947
(3 rows)
Примечание 1
Примечание 1

Аналогом функции date_part() в SQL является функция extract().
date_trunc()
Синтаксис: date_trunc(s. t)
Функция date_trunc () получает два аргумента s и t, относящихся к типам text и timestamp соответственно. Строка s определяет компонент, до которого усекается аргумент t. В данном контексте под усечением понимается удаление всех компонентов, детализация которых превышает заданную.
Допустимые значения аргумента s перечислены в табл. 5.12.

получает один аргумент типа timestamp


booktown=# SELECT extract(MINUTE FROM
interval('3 days 12 minutes1)): datejpart
12
(1 row)
booktown=# SELECT extractCMONTH FROM now()):
date_part
8
(1 row)
isfinite()
Синтаксис:
isfinite(t) isfinite(i)
Функция 1 sf 1 ni te() получает один аргумент типа timestamp или 1 interval. Она возвращает true, если переданное значение не является бесконечным, созданным при помощи специальной константы Infinity или invalid (используется только для timestamp).

в форматной строке отсутствует последовательность


booktown=# SELECT to_char(123456789. '999G999G999D99') AS formatted,
booktown-# to_char(123456789. '999999999') AS justjrigits,
booktown-f to_char(123456789, '00999999999') AS with_zeroes;
formatted | justjrigits | with_zeroes
123.456.789.00 | 123456789 | 00123456789
(1 row)
booktown=# SELECT cost * 100 AS cost_to_order.
booktown-# to_char(cost * 100, '$99.999.99') AS monetary,
booktown-# translate(to_char(cost * 100. '$9,999.99'),' ',").
booktown-# AS translated
booktown-# FROM stock
booktown-* LIMIT 3;
cost_to_order monetary translated
2900.00 | $ 2.900.00 $2.900.00
3000.00 $ 3.000.00 $3.000.00
1600.00 $ 1,600.00 i $1.600.00
(3 rows)
booktown=# SELECT tojrhard.O. '9th "Place"') AS first.
booktown-# to_char(2.2, '9th "Place"') AS second,
booktown-# to_char(pi( ), '9th "Place"') AS third,
booktown-# to_char(10, '99V99th "\\"Place\\.....) AS shifted jjp;
first | second | third | shifted_up
1st Place | 2nd Place | 3rd Place | 1000th "Place"
(1 row)
Примечание 2
Примечание 2

В PostgreSQL версии 7.1.x ошибка в реализации метасимволов RN (римская запись) приводит к тому, что функция to_char() возвращает неправильный результат, если в форматной строке отсутствует последовательность FM. Ошибка должна быть исправлена в версии 7.2, а в качестве временной меры можно использовать полную последовательность FMRN.
to_char() для типа timestamp
Синтаксис:
to_char(t. f)
При вызове с аргументом t типа timestamp и аргументом f типа text функция to_char() форматирует дату и время в строку, возвращаемую в виде значения типа text.
Как и в случае с предыдущей версией to_char(), строка f содержит метасимволы, вместо которых PostgreSQL подставляет литералы. Метасимволы, используемые в форматных строках даты и времени, перечислены в табл. 5.15.

получает два аргумента типа text.


booktown=# SELECT to_char(now(). 'HH:MI PM1) AS the_time;
the_time
05:04 PM
(1 row)
booktown=# SELECT to_char(now(), 'Dy (Day), Mon (Month)')
booktown-# AS abbreviations,
booktown-# to_char('yesterday'::timestamp, 'FMMonth FMDDth')
booktown-# AS yesterday.
booktown-# to_char('yesterday':itimestamp, 'FMDDth FMMonth')
booktown-# AS "yesterday UK";
abbreviations | yesterday j yesterday UK
Sat (Saturday ). Sep (September) | August 31st | 31st August
(1 row)
booktown=# SELECT isbn,
booktown-# to_char(publication, 'FMMonth FMDDth, YYYY')
booktown-# AS informal,
booktown-# to_char(publication, 'YYYY-MM-DD') AS formal,
booktown-# to_char(publication. 'Y.YYY "years" A.D.')
booktown-# AS firstj)ublished
booktown-# FROM editions LIMIT 3;
isbn | informal | formal first_pub1ished
039480001X | March 1st. 1957 1957-03-01 1.957 years A.O.
0451160916 | August 1st. 1981 | 1981-08-01 | 1.981 years A.D.
0394800753 | March 1st. 1949 | 1949-03-01 | 1.949 years A.D.
(3 rows)
to date()
Синтаксис:
to_date(s. f)
Функция to_date() получает два аргумента типа text. Аргумент f описывает формат даты, представленной строкой s, и содержит метасимволы из табл. 5.15. Результат возвращается в виде значения типа date.
В PostgreSQL поддерживается много распространенных форматов данных, однако предусмотреть все форматы невозможно. Функция to_date() гарантирует, что практически любой формат даты, описываемый метасимволами из табл. 5.14, может быть преобразован в значение типа date.
Пример
booktown=# SELECT date('198025thJune')
booktown-f AS non_standard_date_format,
booktown -# toJate (' 198025thJune', ' YYYYDDthMonth')
booktown-# AS correct_interpretation;
non_standard_date_format correct_interpretation
2025-08-27 | 1980-06-25
(1 row)
to_number()
Синтаксис:
to_number(s. f)
Функция to_number() получает два аргумента типа text. Аргумент f описывает формат числа, представленного строкой s, и содержит метасимволы из табл. 5.14. Результат возвращается в виде значения типа numeric.

получает два аргумента типа text.


booktown=# SELECT to_number('$2,900.00', 'L9G999D99')
booktown-# AS monetary: monetary
2900.00 (1 row)
booktown=# SELECT tojiumber('123.456.789.00' . '999G999G999D99')
booktown-# AS formatted,
booktown-# to_numberС123456789'. '999999999')
booktown-# AS just_digits,
booktown-# to_number('00123456789'. '00999999999')
booktown-# AS leading_zeroes;
formatted | just_d1gits | leading_zeroes
123456789.00 123456789 | 123456789
(1 row)
to_timestamp()
Синтаксис:
to_timestamp(s. f)
Функция to_timestamp() получает два аргумента типа text. Аргумент f описывает формат даты/времени, представленного строкой s, и содержит метасимволы из табл. 5.15. Результат возвращается в виде значения типа date.
Эта функция, как и to_date(), прежде всего обеспечивает возможность правильной интерпретации нестандартных строк, содержащих дату и время.

FROM stock JOIN editions USING


booktown=# SELECT avg(cost) AS average_cost,
booktown-# avg(retail) AS average_price,
booktown-# avg(retail - cost) AS average_profit
booktown-# FROM stock:
average_cost | average_price | average_prof1t
24.8235294118 | 30.0088235294 5.1852941176
(1 row)
x>oktown=# SELECT avg(cost)
AS average_cost, p.name AS publisher
booktown-# FROM stock JOIN editions USING (isbn))
booktown-l JOIN publishers AS p (publisheMd)
booktown-# USING (publisheMd)
booktown-# GROUP BY p.name;
average_cost | publisher
26.5000000000 | Ace Books
19.0000000000 | Books of Wonder
26.5000000000 I Doubleday
25.0000000000 | HarperCollins
18.0000000000 | Henry Holt & Company. Inc.
23.0000000000 I Kids Can Press
23.0000000000 | Mojo Press
20.0000000000 I Penguin
23.0000000000 Random House
26.5000000000 | Roc
26.0000000000 | Watson-Guptill Publications
(11 rows)
count()
Синтаксис:
count(выражение)
Функция countO возвращает количество значений, для которых выражение отлично от NULL. Тип выражения не ограничивается. Следует помнить, что функция count () подсчитывает только значения, отличные от NULL, поэтому для получения осмысленных результатов используемое выражение не должно возвращать NULL для подсчитываемых записей.
Если при вызове count() передается символ *, функция просто подсчитывает все записи, в том числе и содержащие NULL.

FROM editions JOIN publishers AS


booktown=# SELECT countC*) FROM editions;
count
17
(1 row)
booktown=# SELECT count(isbn). p.name
booktown-# FROM editions JOIN publishers AS p (publisheMd)
booktown-# USING (publisheMd)
booktown-# GROUP BY p.name
booktown-# ORDER BY count DESC;
count | name
3 | Random House
2 | Ace Books
2 | Doubleday
2 Roc
1 | Books of Wonder
1 | HarperCollins
1 | Henry Holt & Company. Inc.
1 | Kids Can Press
1 | Mojo Press
1 | O'Reilly & Associates
1 | Penguin
1 | Watson-Gupti11 Publications
(12 rows)
max()
Синтаксис:
max(выражение)
Функция max() возвращает максимальное значение заданного выражения в группе. Результатом выражения может быть значение любого числового или строкового типа, а также типа даты или времени. Тип возвращаемого значения совпадает с типом выражения.

возвращает минимальное значение заданного выражения


booktown=# SELECT max(cost), max(retail) FROM stock;
max max
36.00 I 46.95
(1 row)
booktown=# SELECT max(retail), p.name
booktown-# FROM (stock NATURAL JOIN editions)
booktown-# JOIN publishers AS p (publisher_id)
booktown-# USING (publisherjd)
booktown-# GROUP BY p.name
booktown-# ORDER BY max DESC;
max | name
46.95 | Roc
45.95 i Ace Books 36.95 Doubleday 32.95
Random House 28.95 HarperCollins
28.95 I Watson-Guptill Publications
24.95 | Mojo Press
24.95 | Penguin
23.95 1 Henry Holt & Company. Inc. 23.95
Kids Can Press 21.95 Books of Wonder
(11 rows)
min()
Синтаксис:
min (выражение)
Функция min() возвращает минимальное значение заданного выражения в группе. Результатом выражения может быть значение любого числового или строкового типа, а также типа даты или времени. Тип возвращаемого значения совпадает с типом выражения.

О получает выражение, описывающее значения


booktown=# SELECT min(cost). min(retail) FROM stock;
min | min
16.00 16.95
(1 row)
booktown=# SELECT min(retail), p.name
booktown-# FROM (stock NATURAL JOIN editions)
booktown-# JOIN publishers AS p (publisheMd)
booktown-# USING (publisheMd)
booktown-l GROUP BY p.name
booktown-# ORDER BY min ASC;
miP 1 ..mme._
16.95 | Random House
21.95 Ace Books
21.95 I Books of Wonder
22.95 | Roc
23.95 | Henry Holt & Company. Inc.
23.95 | Kids Can Press
24.95 | Mojo Press
24.95 I Penguin
28.95 | Doubleday
28.95 I HarperCollins
28.95 | Watson-Guptill Publications
(11 rows)
stddev()
Синтаксис:
stddev(выражение)
Функция stddev О получает выражение, описывающее значения любого числового типа (numeri с, bigi nt, smal 1 i nt, real или doubl e preci si on), и возвращает среднеквадратичное отклонение для группы. Для вещественных выражений результат возвращается в виде значения типа double precision, а для остальных типов —в виде значения типа numeric.

получает выражение, описывающее значения любого


booktown=# SELECT stddev(retail) FROM stock;
stddev
8.46
(1 row)
booktown=# SELECT stddev(retail), p.name
booktown-# FROM (stock NATURAL JOIN editions)
booktown-# JOIN publishers AS p ON (publisheMd = p.id)
booktown-# GROUP BY p.name
booktown-# ORDER BY stddev DESC
booktown-# LIMIT 4:
stddev | name
16.97 | Ace Books
16.97 | Roc 8.02 Random House
5.66 | Doubleday
(4 rows)
sum()
Синтаксис:
sum (выражение)
Функция sum() получает выражение, описывающее значения любого числового типа (numeric, bigint, smallint, real или double precision), и возвращает сумму значений в группе. Для выражений типа integer результат возвращается в виде значения типа numeric, а для выражений типа real — в виде значения типа double precision. В остальных случаях тип возвращаемого значения совпадает с типом выражения.

получает выражение, описывающее значения любого


booktown=# SELECT sum(stock) FROM stock;
sum
"BOB"
(1 row)
booktown=# SELECT sum(stock). s.subject
booktown-# FROM ((stock NATURAL JOIN editions)
booktown(# JOIN books ON (books.id = bookjd))
booktown-f JOIN subjects AS s
booktown-# ON (books.subject_id = s.id)
booktown-# GROUP BY s.subject
booktown-# ORDER BY sum DESC;
189 | Horror
166 I Science Fiction
91 | Children's Books
28 | Drama
18 | Classics
16 | Arts
(6 rows)
variance()
Синтаксис: variance(выражение)
Функция variance() получает выражение, описывающее значения любого числового типа (numeric, bigint, small int, real или double precision), и возвращает дисперсию для группы (stddevO в квадрате). Для вещественных выражений результат возвращается в виде значения типа double precision, а для остальных типов — в виде значения типа numeric.
Примеры
booktown=# SELECT variance(retaiT) FROM stock;
variance
71.60
(1 row)
booktown=# SELECT varianceCretail), p.name
booktown-# FROM (stock NATURAL JOIN editions)
booktown-# JOIN publishers AS p
booktown-# ON (editions.pub!isher_id = p.id)
booktown-# GROUP BY p.name
booktown-# ORDER BY variance DESC
booktown-# LIMIT 4: variance name
288.00 | Ace Books 288.00 I Roc 64.33 !
Random House 32.00 | Doubleday
(4 rows)

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



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

При работе с большими выражениями, содержащими несколько операторов, полезно знать, в каком порядке выполняются операторы в PostgreSQL. Было бы неправильно полагать, что операторы выполняются слева направо в порядке их следования в выражении. При неправильном понимании этой темы нередко возникают нежелательные побочные эффекты (листинг 5.18).



Сравнение с использованием ключевых слов



Сравнение с использованием ключевых слов

Ключевое слово BETWEEN (также иногда называемое оператором) позволяет проверить, входит ли значение в некоторый интервал. Например, команда SELECT, приведенная в листинге 5.11, находит книги, цена которых находится в интервале от 10 до 17 долларов.



Строковые функции



Строковые функции

В PostgreSQL существует множество разнообразных строковых функций, предназначенных для форматирования, анализа и сравнения строк. К их числу относятся как функции стандарта SQL92, так и нестандартные расширения PostgreSQL (например, ItrimO, rtrimO и substrO). Строковые функции PostgreSQL перечислены в табл. 5.10. В общем случае все, что говорится о типе text, в равной степени относится к значениям типа character и varchar.



Строковые операторы



Строковые операторы

В PostgreSQL существует обширный набор строковых операторов для выполнения различных действий, от простой конкатенации текста и сравнения строк до поиска по регулярным выражениям. Строковые операторы работают с типами char, varchar, а также с собственным типом PostgreSQL text.

Ниже описаны основные операторы сравнения и конкатенации, а также реализация операторов регулярных выражений с учетом и без учета регистра символов.

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

Базовые операторы сравнения строк и конкатенации, поддерживаемые в PostgreSQL, перечислены в табл. 5.1.

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

Ключевые слова LIKE и ILIKE, приводящие к вызову функции 11ke(), иногда называются операторами сравнения строк. Эти ключевые слова рассматриваются ниже в разделе «Функции».



Базовые строковые операторы



Таблица 5.1. Базовые строковые операторы

Оператор

Синтаксис

Описание

= 'строка!' = ' строка2' Возвращает true, если первая строка точно совпадает со второй

! =

'строка!' != ' строка2'

Возвращает true, если первая строка не совпадает со второй

о

'строка!' <> ' строка2'

Идентичен оператору !=

<

'строка!' < ' строка2'

Возвращает true, если при лексикографической сортировке первая строка предшествует второй

<=

'строка!' <= ' строка2'

Возвращает true, если при лексикографической сортировке первая строка предшествует второй или их значения совпадают

>

'строка!' > ' строка2'

Возвращает true, если при лексикографической сортировке вторая строка предшествует первой

>=

'строка!' >= ' строка2'

Возвращает true, если при лексикографической сортировке вторая строка предшествует первой или их значения совпадают

Все операторы сравнения строк возвращают логическое значение (true или false). Лексикографическая сортировка, упоминаемая в табл. 5.1, последовательно сравнивает символы строк и определяет, какой из символов «больше» другого. Если начальные символы двух строк совпадают, проверяются следующие символы (слева направо). Перебор продолжается до тех пор, пока не будут найдены два различающихся символа. В этом алгоритме сортировки «больший» символ выбирается сравнением ASCII-кодов, как показывает следующий пример:

booktown=# SELECT letter, ascii(letter)

booktown-# FROM text_sorting

booktown-# ORDER BY letter ASC;

letter ascii

0 48

1 49

2 50

3 51

A 65

В 66

С 67

D 68

a 97

b 98

с 99

d I 100

(12 rows)

Если вы не уверены в порядке сортировки того или иного символа, воспользуйтесь функцией ascii О для получения его ASCII-кода (функция asci i () описана ниже в разделе «Функции»). В листинге 5.3 из таблицы books выбираются названия всех книг, первая буква которых при сортировке предшествует символу «D».



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



Таблица 5.2. Операторы регулярных выражений

Оператор

Синтаксис

Описание

-

' строка' ~ ' выражение'

Возвращает true, если в строке существует совпадение для регулярного выражения

i ~

'строка' \- 'выражение'

Возвращает true, если в строке нет совпадения для регулярного выражения

~*

' строка' ~* ' выражение'

Возвращает true, если в строке существует совпадение для регулярного выражения (без учета регистра символов)

|_*

'строка' !-* 'выражение'

Возвращает true, если в строке нет совпадения для регулярного выражения (без учета регистра символов)

В табл. 5.3 перечислены метасимволы регулярных выражений. Как было указано выше, в регулярных выражениях эти символы интерпретируются особым образом.



Метасимволы регулярных выражений



Таблица 5.3. Метасимволы регулярных выражений

Символ

Синтаксис

Описание

-

^выражение

Соответствует началу строки

$

выражение$

Соответствует концу строки

. ,

Соответствует одному символу

[ ]

[abc]

Соответствует любому из символов, перечисленных в квадратных скобках

Г]

ГаЬс]

Соответствует любому символу кроме символов, перечисленных в квадратных скобках

[-]

[a-z]

Соответствует любому символу из интервала, заданного в квадратных скобках

Г-]

Га-z]

Соответствует любому символу кроме символов из интервала, заданного в квадратных скобках

7

а?

Соответствует нулю экземпляров или одному экземпляру предшествующего символа или подвыражения

*

а*

Соответствует нулю экземпляров или произвольному количеству экземпляров предшествующего символа или подвыражения

+

а+

Соответствует одному и более экземпляров предшествующего символа или подвыражения

1

выражение! \ выражение2

Соответствует левому или правому подвыражению

( )

(выражение!) выражение2

Группировка подвыражений с явным определением приоритета выполняемых операций

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

Литералы, совпадающие с метасимволами из табл. 5.3, должны экранироваться в строке двумя символами \ (например, знак $ представляется последовательностью \\$).

Регулярные выражения часто применяются для поиска подстрок в строках-литералах большего размера. При поиске соответствия с учетом регистра символов используется оператор -; с оператором -* регистр игнорируется. Примеры приведены в листинге 5.6.



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



Таблица 5.4. Математические операторы

Оператор

Синтаксис

Описание

+

а + b

Суммирование числовых величин а и b

-

а - Ь

Вычитание числовой величины b из а

*

а * b

Умножение числовых величин а и b

/

а / b

Деление числовой величины а на b

%

а % b

Остаток от деления а на b

А

а - b

Возведение а в степень b

|/

!/ а

Квадратный корень из а

II/

||/ а

Кубический корень из b

1

а!

Факториал а

! 1

!! а

Факториал а (отличается от постфиксного оператора только расположением)

@

@ а

Модуль (абсолютное значение) а

Пример использования математических операторов в целевом списке приведен в листинге 5.9. Оператор / используется для вычисления удельной прибыли по каждой книги. Частное от деления преобразуется к типу numeri с с усечением до двух цифр в дробной части. Наконец, из результата вычитается целочисленная константа 1, чтобы результат выражался в процентах свыше 100.



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



Таблица 5.5. Операторы сравнения

Оператор

Описание

<

Возвращает true, если левое значение меньше правого

>

Возвращает true, если левое значение больше правого

<=

Возвращает true, если левое значение меньше правого или равно ему

>=

Возвращает true, если левое значение больше правого или равно ему

=

Возвращает true, если левое значение равно правому

<> или ! =

Возвращает true, если левое значение не равно правому

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

Оператор <> существует как синоним оператора != для обеспечения совместимости с другими реализациями СУБД на базе SQL. Работают эти операторы одинаково.

Пример команды, в которой используются операторы сравнения, приведен в листинге 5.10.



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



Таблица 5.6. Двоичные операторы

Оператор

Синтаксис

Описание

&

а & b

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

1

а | b

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

f

а # b

Поразрядная операция исключающей дизъюнкции двоичных представлений а и b (которые могут быть заданы в виде целых чисел)

-

- b

Поразрядное отрицание, возвращает инвертированную битовую последовательность b

«

b « n

Сдвиг b влево на n разрядов

»

b » n

Сдвиг b вправо на n разрядов

В листинге 5.13 приведен пример сдвига числа и его двоичного представления на два разряда вправо оператором ». Кроме того, в нем используется функция преобразования битовой последовательности в целочисленный тип bitten nt4(), описанная в разделе «Функции».



Операторы AND OR и NOT



Таблица 5.7. Операторы AND, OR и NOT

а

b

aANDb

aORb

NOT a

NOTb

true

true

true

true

false

false

true

false

false

true

false

true

true

NULL

NULL

true

false

NULL

false

false

false

false

true

true

false

NULL

false

NULL

true

NULL

NULL

NULL

NULL

NULL

NULL

NULL

В листинге 5.14 приведена пара запросов с ключевыми словами OR и AND, объединяющими условия выборки записей. Первый запрос возвращает информацию о книгах, которые стоят больше 30 долларов или отсутствуют на складе. Как видно из итогового набора, для возвращения записи должно выполняться одно или оба условия.

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



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



Таблица 5.8. Приоритет операторов SQL

Оператор

Синтаксис

Описание

значение: : тип

Явное преобразование типа

[ ]

значение^ индекс]

Индексация элемента массива

 

таблица, поле

Разделитель имен таблицы и столбца

-

-значение

Унарный минус

А

основание * степень

Возведение в степень

* / %

значение! * значение2

Умножение, деление и остаток

+ -

значение! + значение2

Сложение и вычитание

IS

значение IS признак

Сравнение с true или false

IS NULL

значение IS NULL

Сравнение с NULL

IS NOT NULL

значение IS NOT NULL

Проверка несовпадения с NULL

Прочее

Все остальные пользовательские и встроенные операторы, не входящие ни в одну из категорий

IN

значение IN набор

Проверка принадлежности к заданному набору

BETWEEN

значение BETWEEN a AND b

Проверка принадлежности к интервалу [а. Ь]

LIKE, ILIKE

строка LIKE, шаблон

Проверка совпадения шаблона со строкой

<><=>=

значение! < значение2

Сравнения по критериям «меньше», «больше», «меньше либо равно», «больше либо равно»

=

значение! = значение2

Проверка равенства

NOT

NOT значение

Логическое отрицание

AND

значение! AND значение2

Логическая конъюнкция

OR

значение! OR значение2

Логическая дизъюнкция

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

Приоритет операторов, приведенных в табл. 5.8, распространяется на пользовательские операторы, обозначения которых совпадают с обозначениями встроенных операторов. Например, если вы определите собственный оператор + для своего типа данных, он будет обладать таким же приоритетом, как встроенный оператор +, независимо от своего предназначения.



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



Таблица 5.9. Математические функции PostgreSQL

Функция

Описание

abs(x)

Возвращает модуль (абсолютное значение) х

acos(x)

Возвращает арккосинус х

asin(x)

Возвращает арксинус х

atan(x)

Возвращает арктангенс х

atan2(x.y)

Возвращает арктангенс х/у

cbrt(x)

Возвращает кубический корень х

ceil (x)

Возвращает минимальное целое число, не меньшее х (округление в верхнюю сторону)

cos(x)

Возвращает косинус х

cot(x)

Возвращает котангенс х

degrees(r)

Возвращает количество градусов в г радиан

exp(x)

Возвращает константу е (2,71828...) в степени х

floor(x)

Возвращает максимальное целое число, не большее х (округление в нижнюю сторону)

ln(x)

Возвращает натуральный логарифм х (функция, обратная ехр(х))

log(b.x)

Возвращает логарифм х по основанию b

log(x)

Возвращает десятичный логарифм х

modtx.yj

Возвращает остаток от деления х/у

pi О

Возвращает константу к (3,14159...)

pow(x.y)

Возвращает х в степени у

radians(d)

Возвращает количество радиан в d градусов

ranaomO

Возвращает псевдослучайное число в интервале от 0,0 до 1,0

round(x)

Возвращает число х, округленное до ближайшего целого

sin(x)

Возвращает синус х

sqrt(x)

Возвращает квадратный корень х

tan(x)

Возвращает тангенс х

trunc(x)

Возвращает целую часть х

trunc(x.s)

Возвращает значение х, усеченное до s цифр в дробной части

Ниже приведены более подробные описания всех функций, перечисленных в таблице, с указанием аргументов, типов данных и выполняемых действий. Хотя функция обычно принимает аргументы лишь одного типа, PostgreSQL при необходимости пытается привести переданные аргументы к нужному типу. Если попытка автоматического преобразования типа завершается неудачей, PostgreSQL выводит сообщение об ошибке и вы можете попытаться выполнить явное преобразование. Дополнительная информация о явном преобразовании типов приведена в главе 3.

abs(x)

Синтаксис:

abs(x)

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

Аргумент функции abs() может относиться к любому из числовых типов данных (numeric, bigint, small int, real или double precision). Тип возвращаемого значения совпадает с типом аргумента.



Строковые функции



Таблица 5.10. Строковые функции

Функция

Описание

ascii(s)

Возвращает ASCII-код символа, переданного в виде строковой переменной s

btrim(s [, t])

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

char length(s)

Возвращает длину строки s в символах

chr(n)

Возвращает символ с ASCII-кодом n

s ilike(f)

Возвращает true, если выражение f совпадает (без учета регистра символов) с s

imtcap(s)

Возвращает строку s, в которой первая буква каждого слова преобразуется к верхнему регистру

length(s)

Возвращает длину строки s в символах

s like(f)

Возвращает true, если выражение f совпадает с s

lower (s)

Возвращает строку s, преобразованную к нижнему регистру

lpad(s. n [. c])

Возвращает строку s, дополненную слева содержимым строки с (или пробелами, если аргумент с не задан) до длины n (или усеченную справа до n символов)

ltrim(s [. f])

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

octet_length(s)

Возвращает длину строки s в байтах

pos1tion(b IN s)

Возвращает позицию подстроки b в строке s (отсчет начинается с 1)

repeat (s, n)

Возвращает строку s, повторенную n раз

rpad(s. n. [. c])

Возвращает строку s, дополненную справа содержимым строки с (или пробелами, если аргумент с не задан) до длины n (или усеченную слева до n символов)

rtrim(s [. f])

Возвращает строку s, в конце которой удалены все символы, входящие в строку f (если аргумент f не задан, усекаются конечные пропуски — пробелы, символы табуляции и т. д.)

strpos(s. b)

Возвращает позицию подстроки b в строке s (отсчет начинается с 1). Относится к числу функций PostgreSQL и дублирует функцию SQL positionO, но с передачей аргументов в стиле С

substr(s. b [. 1])

Выделяет из строки s подстроку, начинающуюся с позиции n (отсчет начинается с 1). Необязательный аргумент 1 определяет максимальную длину подстроки в символах

substring
FROM n FOR 1 )

Выделяет из строки s подстроку, начинающуюся с позиции n (отсчет начинается с 1). Необязательный аргумент 1 определяет максимальную длину подстроки в символах

to_ascii (s. f)

Возвращает строку s, преобразованную из расширенной кодировки f в ASCII

translate(s. f. r)

Возвращает строку s, в которой все символы, входящие в строку f, заменяются соответствующими символами строки г

trim(направление f FROM s)

Возвращает строку s, в начале и/или в конце которой удалены все символы, входящие в строку f. В аргументе направление передается ключевое слово SQL, определяющее направление усечения (LEADING, TRAILING или BOTH)

upper(s)

Возвращает строку s, преобразованную к верхнему регистру

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

ascii()

Синтаксис: ascii(s)

Функция asci i () получает один аргумент — отдельный символ или строку типа text, и возвращает числовой ASCII-код первого интерпретированного символа. Результат возвращается в виде значения типа integer.



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



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

Функция

Описание

current date

Возвращает текущую дату в виде значения типа date

current time

Возвращает текущее время в виде значения типа time

current timestamp

Возвращает текущие дату и время в виде значения типа timestamp

date_part(s. t)

Выделяет из значения типа timestamp компонент даты или времени, определяемый строкой s

date_part(s. i)

Выделяет из значения типа interval компонент даты или времени, определяемый строкой s

date trunc(s, t)

Возвращает значение типа timestamp, усеченное до точности s

extract (k FROM t)

Выделяет из значения типа timestamp компонент даты или времени, определяемый ключевым словом k

extracttk FROM i)

Выделяет из значения типа interval компонент даты или времени, определяемый ключевым словом k

isfinite(t)

Возвращает true, если значение типа timestamp соответствует конечной величине (не invalid и не infinity)

isfinite(i)

Возвращает true, если значение типа interval соответствует конечной величине (не infinity)

now()

Возвращает текущие дату и время в виде значения типа timestamp. Эквивалент константы now

timeofdayO

Возвращает текущие дату и время в виде значения типа text

Ниже приведены более подробные описания всех функций, перечисленных в таблице. Обратите внимание на отсутствие круглых скобок в определениях функций current_date, current_time и current_timestamp — это сделано для сохранения совместимости со стандартом SQL92.

current_date

Синтаксис:

current_date

Функция current_date вызывается без аргументов и возвращает текущую дату в виде значения типа date. Результат эквивалентен преобразованию специальной константы now к типу date.



Компоненты типов timestamp и interval



Таблица 5.12. Компоненты типов timestamp и interval

Компонент

Описание

century

Год, разделенный на 100 (не совпадает с текущим веком!)

day

День месяца (от 1 до 31) для типа timestamp, продолжительность интервала в днях для типа interval

decade

Год, разделенный на 10

dow

День недели (от 0 до 6), начиная с воскресенья. Для типа interval не поддерживается

doy

День года (от 1 до 366). Для типа interval не поддерживается

epoch

Количество секунд от начала эпохи (1 января 1970 г.) для типа timestamp, продолжительность интервала в секундах для типа interval

hour

Час в значении типа timestamp

microseconds

Количество миллионных долей в дробной части секунд для значения типа timestamp

millennium

Год, разделенный на 1000 (не совпадает с текущим тысячелетием!)

mi 11 i seconds

Количество тысячных долей в дробной части секунд для значения типа timestamp

minute

Минуты в значении типа timestamp или interval

month

Месяц в значении типа timestamp или остаток от деления продолжительности интервала в месяцах на 12 для типа interval

quarter

Квартал (от 1 до 4) для значений типа timestamp

second

Секунды в значении типа timestamp или interval

week

Номер недели в году для значений типа timestamp. В стандарте ISO-8601 первая неделя года определяется как неделя, в которую входит 4 января

year

Год в значении типа timestamp или interval



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



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

Функция

Описание

t>1tfromint4(n)

Преобразует число в битовую последовательность

DlttOinW(b)

Преобразует битовую последовательность в десятичное представление

to_cnar(n. f)

Преобразует число в строку в формате f

to_char(t. f)

Преобразует значение типа timestamp в строку в формате f

to_date(s. f)

Преобразует строку в формате даты f в значение типа date

to_number(s. f)

Преобразует строку в формате даты f в значение типа numeric

to timestamp(s. f)

Преобразует строку в формате даты f в значение типа timestamp

timestamp(d)

Преобразует значение типа date к типу timestamp

timestamp(d. t)

Преобразует два значения типов date и time к типу timestamp

bitfromint4()

Синтаксис:

bit.fromint4(n)

Функция bitfromint4() получает один аргумент п типа integer и возвращает его представление в виде битовой последовательности. Поскольку явного преобразования между двоичным и целочисленным типом не существует, преобразование десятичных данных в двоичную систему счисления должно Осуществляться специальной функцией.

Возвращаемое значение относится к типу bi t, а его длина не превышает 32 бита. Поскольку тип i nteger является знаковым, допустимые значения аргумента лежат в интервале от -2 147 483 648 до 2 147 483 647.



Метасимволы форматирования чисел



Таблица 5.14. Метасимволы форматирования чисел

Символ

Описание

9

Цифра

0

Цифра или начальный/конечный ноль, если количество цифр в f превышает количество цифр в п; может использоваться для принудительного вывода цифр в левой или правой части результата

.

Точка, отделяющая целую часть числа от дробной. Число может содержать только одну точку

'

Запятая. Число может содержать несколько запятых, используемых для разделения групп разрядов (тысячи, миллионы и т. д.)

D

Десятичный разделитель (например, точка), определяемый в локальном контексте

G

Разделитель групп разрядов (например, запятая), определяемый в локальном контексте

PR

Если PR находится в конце строки f, для отрицательных значений п результат заключается в угловые скобки

SG

Знак плюс (+) или минус (-) в зависимости от значения п

MI

Знак минус (-), если число п является отрицательным

PL

Знак плюс (+), если число п является положительным

S

Знак плюс (+) или минус (-), определяемый в локальном контексте

L

Денежный знак, определяемый в локальном контексте

RN

Римские цифры для значений п в интервале от 1 до 3999

TH. th

Суффикс числительного для числа п (например, 4th или 2nd)

V

Для каждого метасимвола 9 после V добавляется лишний ноль, то есть фактически происходит умножение на степень 10

FM

Из числа удаляются все начальные и завершающие нули (созданные символами 9, но не 0), а также все лишние пробелы

Если количество цифровых позиций, обозначенных метасимволом 9 в форматной строке, превышает количество цифр в числе п, лишние позиции заполняются пробелами. Если лишние цифровые позиции обозначены метасимволом 0, лишние позиции заполняются нулями.

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

рые могут быть получены в результате форматирования. Для удаления лишних пробелов также можно воспользоваться функцией trans! ate() или функциями усечения (HrimO и т. д.).

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

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

В форматной строке можно свободно использовать любые символы, не являющиеся метасимволами (например, символ $ и др.) В отформатированной строке они выводятся без изменений.



Метасимволы форматирования чисел



Таблица 5.15. Метасимволы форматирования чисел

Символ

Описание

НН. НН12

Час (от 1 до 12)

НН24

Час (от 0 до 23)

Ml

Минуты (от 0 до 59)

SS

Секунды (от 0 до 59)

SSSS

Секунды, прошедшие с полуночи (от 0 до 86 399)

AM, РМ, А.М, Р.М

Обозначение части суток в верхнем регистре с необязательным разделением символов точками

am, pm, a . m, p . m

Обозначение части суток в нижнем регистре с необязательным разделением символов точками

TZ, tz

Часовой пояс в верхнем или нижнем регистре

CC

Век, представленный двумя цифрами (не равен тку, деленному на 100!)

Y, YY, YYY, YYYY, Y.YYY

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

BC, AD, B.C, A.O

Признак эры в верхнем регистре

be, ad, b.c, a.d

Признак эры в нижнем регистре

MONTH, Month, month

Полное название месяца, дополненное справа пробелами до 9 символов и записанное либо в верхнем регистре, либо с начальной прописной буквой, либо в нижнем регистре

MON, Mon, mon

Сокращенное трехбуквенное обозначение месяца, записанное либо в верхнем регистре, либо с начальной прописной буквой, либо в нижнем регистре

MM

Номер месяца (от 1 до 12)

RN, rn

Номер месяца в римской записи (от I до XII), в верхнем или нижнем регистре

DAY, Day, day

Полное название дня недели, дополненное справа пробелами до 9 символов и записанное либо в верхнем регистре, либо с начальной прописной буквой, либо в нижнем регистре

DY, Dy, dy

Сокращенное двухбуквенное обозначение дня недели, записанное либо в верхнем регистре, либо с начальной прописной буквой, либо в нижнем регистре

DDD, DD, D

День года (от 1 до 366), день месяца (от 1 до 31) или день недели (от 1 до 7, начиная с воскресенья)

W

Неделя месяца (от 1 до 5, с первого дня месяца)

WW

Неделя года (от 1 до 53, с первого дня года)

IW

Неделя года в стандарте ISO (с первого четверга нового года)

TH, th

Суффикс для предшествующего числа в верхнем или нижнем регистре

fm

Из строки удаляются все лишние нули и пробелы

Суффикс ТН и префикс FM должны непосредственно примыкать к тому значению, которое они модифицируют. Например, чтобы префикс FM применялся к компоненту Day, строка должна иметь вид FMDay (а не FM Day). Аналогично, чтобы день месяца выводился с суффиксом числительного, потребуется форматная строка DDTH (а не DD ТН).



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



Таблица 5.16. Агрегатные функции

Функция

Описание

avg( выражение')

Возвращает среднее арифметическое значений выражения для всех записей в группе

count ( выражение)

Возвращает количество записей в группе, для которых значение выражения отлично от NULL

ma x ( выражение}

Возвращает максимальное значение выражения в группе

mint выражение)

Возвращает минимальное значение выражения в группе

stddev ( выражение)

Возвращает среднеквадратичное отклонение значений выражения в группе

surrK выражение)

Возвращает сумму значений выражения в группе

variance( выражение)

Возвращает дисперсию значений выражения в группе

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