loading..
Русский    English
04:09
листать

Генерация числовой последовательности стр. 2

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

  1. generate_series(start, stop [, step])

Здесь
start - начальное значение последовательности,
stop - конечное значение последовательности,
step - шаг последовательности (по умолчанию равен 1).

Применение данной функции проще показать на примерах. Начнем с задачи, которая рассматривалась на предыдущей странице:

Получить 100 последовательных незанятых номеров моделей, идущих за последним номером модели в таблице Product.

Решение для PostgreSQL можно записать очень лаконично:

  1. SELECT CAST(MAX(model) AS INT) + generate_series(1,100) AS num FROM Product;

Преобразование типа здесь необходимо, поскольку номер модели (model) имеет тип VARCHAR.

Следующий пример - это вывод алфавита, который мы получали с помощью SQL-рекурсии. Применим тот же алгоритм, а именно, к коду первой буквы будем последовательно добавлять единицы, после чего преобразуем полученные коды к символам:

  1. SELECT CHR(ASCII('A') + generate_series(0,25)) AS letter ORDER BY 1;

Наконец, рассмотрим довольно часто возникающую необходимость получения последовательности дат. В связи с этим отметим, что третий параметр (step) может быть не только типа INT, но и типа INTERVAL. Последнее позволит нам непосредственно работать с последовательностями дат, минуя преобразование последовательности чисел к последовательности дат. Итак,

Вывести последовательность дат между датами первого и последнего полета пассажира с id_psg=5.

  1. SELECT generate_series(MIN(date), MAX(date), '1 day')
  2. FROM pass_in_trip WHERE id_psg = 5;

Поскольку пока на внутренних страницах учебника есть возможность выполнять скрипты только под  Язык структурированных запросов) — универсальный компьютерный язык, применяемый для создания, модификации и управления данными в реляционных базах данных. SQL Server, вы можете для выполнения приведенных здесь запросов воспользоваться консолью, выбрав PostgreSQL в списке поддерживаемых СУБД.

Страницы: 1 2
Тэги:
ALL AND AUTO_INCREMENT AVG battles CASE CAST CHAR CHARINDEX CHECK classes COALESCE CONSTRAINT Convert COUNT CROSS APPLY CTE DATEADD DATEDIFF DATENAME DATEPART DATETIME DDL DEFAULT DELETE DISTINCT DML EXCEPT EXISTS EXTRACT FOREIGN KEY FROM FULL JOIN GROUP BY Guadalcanal HAVING IDENTITY IN INFORMATION_SCHEMA INNER JOIN insert INTERSECT IS NOT NULL IS NULL ISNULL laptop LEFT LEFT OUTER JOIN LEN maker Больше тэгов
Учебник обновлялся
несколько дней назад
обмен с neo
©SQL-EX,2008 [Развитие] [Связь] [О проекте] [Ссылки] [Team]
Перепечатка материалов сайта возможна только с разрешения автора.