Время продолжительности дня SQL - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть временные интервалы:

11-09-2018 10:00 AM - 11-09-2018 12:00 PM
11-09-2018 4:00 PM  - 11-09-2018 8:00 PM

У меня есть требование написать SQL-запрос, чтобы получить остальные оставшиеся длительности для дня 11-09-2018.Вывод моего запроса должен быть:

11-09-2018 12:00 AM - 11-09-2018 9:59 AM
11-09-2018 12:01 PM - 11-09-2018 3:59 PM
11-09-2018 08:01 PM - 11-09-2018 11:59 PM

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

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

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

Один из способов сделать это - «создать строку перед каждой существующей строкой, объединенную с последней строкой»

Используя самообъединение (OUTER), чтобы получить ссылку на предыдущую строку, ВЫБЕРИТЕ одну минуту после end time предыдущей строки как start time (COALESCE NULL с '12 AM ') и за одну минуту до текущая строка start time как end time. Используйте предложение WHERE, чтобы отфильтровать любую строку с start time '12: 00 AM'.

Это даст вам для каждой строки в таблице временной интервал до нее, который вы хотите.

Затем вы СОЕДИНЯЕТЕ это с последней строкой, состоящей из одной минуты после последнего end time как start time и '11: 59 PM 'как end time. Используйте предложение WHERE, чтобы отфильтровать эту строку, если последний end time равен '11: 59 PM'.

0 голосов
/ 11 сентября 2018

пожалуйста, используйте это как общее требование, это полезно, если вы хотите указать любую дату ИЛИ datetime в качестве входных данных и хотите получить выходные данные, как указано выше, тогда вы можете использовать следующий запрос.Поместите любую дату или дату-время (метку времени) вместо getdate (), и вы получите требуемый вывод.

ПЕЧАТЬ КОНВЕРТА (VARCHAR, dateadd (чч, 00, датированный (dd, 0, GETDATE ())), 100) + '-' + CONVERT (VARCHAR, dateadd (mi, 59, dateadd (hh, 09, datediff (dd, 0, GETDATE ()))), 100) + '' + char (13) + char (10) + CONVERT (VARCHAR, dateadd (mi, 01, dateadd (чч, 12, датированный (dd, 0, GETDATE ()))), 100) + '-' + CONVERT (VARCHAR, dateadd (mi, 59, dateadd)(hh, 15, датированный (dd, 0, GETDATE ()))), 100) + '' + char (13) + char (10) + CONVERT (VARCHAR, dateadd (mi, 01, dateadd (hh, 20,datediff (dd, 0, GETDATE ()))), 100) + '-' + CONVERT (VARCHAR, dateadd (mi, 59, dateadd (чч, 23, datediff (dd, 0, GETDATE ()))), 100)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...