Форум программистов, компьютерный форум, киберфорум
PostgreSQL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/25: Рейтинг темы: голосов - 25, средняя оценка - 4.72
16 / 14 / 4
Регистрация: 21.11.2014
Сообщений: 320

Массивы

23.03.2021, 10:40. Показов 5256. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Вот суть проблемы есть два массива с датами:
Oracle 11 SQL
1
2
arrayStartDate := ARRAY(SELECT "StartDate" FROM "AUR_PersonWorkExpirience" WHERE "ClaimId" = claimid::uuid);
arrayEndDate := ARRAY(SELECT "EndDate" FROM "AUR_PersonWorkExpirience" WHERE "ClaimId" = claimid::uuid);
Надо вытащить из обоих массивов год и месяц, но общий, то есть прибавить каждые даты из StartDate bи каждые даты из EndDate, но я в упор непонимаю как работать с масcивом и решить эту проблему я делал с одной StarDate и с одной EndDate

Oracle 11 SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
StartDate = (SELECT "StartDate" 
             FROM "AUR_PersonWorkExpirience" 
             WHERE "ClaimId" = claimid::uuid);
 
EndDate = (SELECT "EndDate" 
           FROM "AUR_PersonWorkExpirience"
          WHERE "ClaimId" = claimid::uuid);
          
years = (SELECT EXTRACT(YEAR FROM AGE(EndDate,StartDate)));
 
months = (EXTRACT(MONTH FROM AGE(EndDate,StartDate)));     
 
workExpirience = CONCAT (years , ',' , months);
но как быть с массивом понятия не имею разобрался только как селект делать,а как обработать по тоиже схеме что я делал незнаю, помогите пожалуйста!!!!
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.03.2021, 10:40
Ответы с готовыми решениями:

динамические массивы
User: { id: string, firstName: string, lastName: string, books: book } book: { id: string, Autor: string,

Массивы в json
Всем добрый день. Помогите с проблемой... Есть поле geo_obj типа json. В нем тег points, который представляет собой трехмерный массив. ...

Массивы в БД
Поделитесь информацией, пожалуйста. нужны ответы на массивы переменны их описание. Обмен данными с БД и также обработка массивов данных. ...

6
1264 / 978 / 384
Регистрация: 02.09.2012
Сообщений: 3,021
23.03.2021, 17:55
Покажите на примере данных, что к чему вы хотите прибавить.
0
16 / 14 / 4
Регистрация: 21.11.2014
Сообщений: 320
23.03.2021, 18:08  [ТС]
ну задача такая есть к примеру даты
23.01.2021 и 23.01.2022
23.01.2021 и 23.01.2023
23.01.2021 и 23.01.2024
23.01.2021 и 23.01.2025

мне надо получить из каждой пары период,если смотреть что я привел как пример даты то между первой парой год,второй два года и так далее и 0 дней получается, ну мне нужно прибавить этот пероид друг к другу, получится 10 лет и 0 месяцев

Добавлено через 1 минуту
и если говорить об одной паре как я сделал выще то можно вычеслить месяца и года
вот так
Oracle 11 SQL
1
2
3
years = (SELECT EXTRACT(YEAR FROM AGE(EndDate,StartDate)));
 
months = (EXTRACT(MONTH FROM AGE(EndDate,StartDate)));
Добавлено через 25 секунд
но я незнаю как это провернуть с целым массивом

Добавлено через 1 минуту
ой простите я там выще написал дней я хотел написать года и месяца

Добавлено через 4 минуты
но есть загвоздка в примере что я написал он с пересечением диапазонов и это выходит слишком большая цифра как еще и это рещить пересечение
0
1264 / 978 / 384
Регистрация: 02.09.2012
Сообщений: 3,021
23.03.2021, 18:12
вот так же можно

SQL
1
2
3
4
5
6
7
SELECT
 SUM(age(d_to::DATE, d_from::DATE))
FROM
unnest(
  array['2021-01-23', '2021-01-23', '2021-01-23', '2021-01-23'],
  array['2022-01-23', '2023-01-23', '2024-01-23', '2025-01-23']
) AS x(d_from, d_to)
1
16 / 14 / 4
Регистрация: 21.11.2014
Сообщений: 320
23.03.2021, 19:10  [ТС]
а как месяца добавить и запихнуть это в таку конструкцию ???
Oracle 11 SQL
1
workExpirience = CONCAT (years , ',' , months);
Добавлено через 2 минуты
хотя с этим ладно разберусь, как быть с пересечением вот сложный вопрос

Добавлено через 7 минут
чтоб вы понимали о чем я, идет речь типа о опыте работы человека и у него опыт с 21 по 25, и это не 10 лет, и надо как то что если пересекаются диапазоны то не брать в счет этот период то есть по идее должно показать 5 лет

Добавлено через 43 минуты
очень надо я никак не врублюсь как сделать с этими диапазонами, если то и решил сам своим способом конченым, ваш куда шикарней за что спасибо говорю но вот помогите еще с диапазонами
0
1264 / 978 / 384
Регистрация: 02.09.2012
Сообщений: 3,021
26.03.2021, 15:09
Лучший ответ Сообщение было отмечено Nightwalker как решение

Решение

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

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
WITH
q1_src AS (
  -- здесь готовим сырые данные (разворачиваем массивы, приводим типы и т.п.)
  -- на выходе q1_src должен получиться набор диапазонов из исходных данных
  SELECT daterange(range_begin, range_end) AS range FROM
  unnest(
    array['2021-01-23'::DATE, '2021-01-23'::DATE, '2021-01-23'::DATE, '2021-01-23'::DATE],
    array['2022-01-23'::DATE, '2023-01-23'::DATE, '2024-01-23'::DATE, '2025-01-23'::DATE]) AS src(range_begin, range_end)),
q2_bounds AS (
  -- здесь определяем границы каждого диапазона
  -- для upper(range) берем max из предыдущих просмотренных записей,
  -- тогда диапазон с меньшим range_end будет покрываться диапазоном с большим range_end
  -- при их упорядочивании по нижней границе
  SELECT
    range,
    LOWER(range) AS range_begin,
    MAX(UPPER(range)) OVER (ORDER BY range) AS range_end
  FROM q1_src),
q3_merge AS (
  -- выставляем специальный флаг, если диапазоны пересекаются и их можно объединить;
  -- всегда берем самую раннюю нижнюю границу (lag), сохраняя порядок следования диапазонов
  SELECT
    range, range_begin, range_end,
    lag(range_end) OVER (ORDER BY range) < range_begin OR NULL AS merge_flag
  FROM q2_bounds),
q4_grp AS (
  -- определяем группы взаимно-непересекающихся диапазонов
  SELECT
    range_begin, range_end,
    COUNT(merge_flag) OVER (ORDER BY range) AS merge_grp
  FROM q3_merge)
SELECT
  daterange(MIN(range_begin), MAX(range_end)) AS range
FROM
  q4_grp
GROUP BY merge_grp
ORDER BY 1;
В результате для ваших данных из примера будет все сгрупиировано в одну группу
Code
1
2
3
4
          range          
-------------------------
 [2021-01-23,2025-01-23)
(1 строка)
Дальше уже можно распарсить диапазон, вычислить из него интервал.
Для несоклькоих диапазонов посчитать сумму интервалов.

И уже не нужно городить много FOR/IF конструкций, все умещается в один запрос.
Плюс запроса также в том, что можно оперировать любыми range типами (даты, целые числа), которые поддерживает postgresql.
1
16 / 14 / 4
Регистрация: 21.11.2014
Сообщений: 320
26.03.2021, 21:10  [ТС]
Спасибо за ответ,да я создавал темы они связаны с этой,но там чиста технические моменты уже с пересечением я забил решил по другому без нахождения пересечений, но спасибо тема закрыта!!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.03.2021, 21:10
Помогаю со студенческими работами здесь

Массивы в Access
Всем добрый день! Очень нужна ваша помощь! С VB я не работала очень давно - почти ничего не помню, но появилась необходимость. задача...

Массивы или ArrayList
В PL/SQL блоке производится обработка данных циклом, после каждого прохода цикла нужно запоминать результат? подскажите как их сохранять в...

процедуры ненутрят массивы...
Подскажите чайнику изящный способ сделать массовый insert через stored procedure. В книжке пишут, что все параметры д.б. одинаковой...

Не работают массивы VBA
Здравствуйте форумчане! Беда! Убил уже два часа, перепробовал всё от копипасты с учебников до импровизации, а воз и ныне там... Суть...

JavaScript PHP MySQL массивы
Подскажите как сделать что-то подобное этому:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru