Узнайте количество дней, перекрывающихся между двумя диапазонами дат в mysql - PullRequest
0 голосов
/ 24 июня 2019

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

Попытка сделать это просто в MySQL без прохождения циклов в PHP, который является языком интерфейса.

id | start_date | end_date
1  | 2019-01-02 | 2019-01-07
2  | 2019-01-03 | 2019-01-03
3  | 2019-01-06 | 2019-01-09

Диапазон дат start = 2019-01-04, Диапазон дат end = 2019-01-07

С датами в format YYYY-MM-DD

Хотелось бы, чтобы конечный результат был:

id | start_date | end_date    | total_days
1  | 2019-01-02 | 2019-01-07  | 4
2  | 2019-01-03 | 2019-01-03  | 0
3  | 2019-01-05 | 2019-01-09  | 3

Ответы [ 2 ]

0 голосов
/ 24 июня 2019
DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(id SERIAL PRIMARY KEY
,start_date DATE NOT NULL
,end_date DATE NOT NULL
);

INSERT INTO my_table VALUES
(1,'2019-01-02','2019-01-07'),
(2,'2019-01-03','2019-01-03'),
(3,'2019-01-06','2019-01-09');

SELECT x.*
     , COALESCE(DATEDIFF(LEAST(y.end_date,'2019-01-07'),GREATEST(y.start_date,'2019-01-04')) + 1 ,0) delta
  FROM my_table x 
  LEFT 
  JOIN my_table y
    ON y.id = x.id
   AND y.start_date <= '2019-01-07' 
   AND y.end_date >= '2019-01-04';
+----+------------+------------+-------+
| id | start_date | end_date   | delta |
+----+------------+------------+-------+
|  1 | 2019-01-02 | 2019-01-07 |     4 |
|  2 | 2019-01-03 | 2019-01-03 |     0 |
|  3 | 2019-01-06 | 2019-01-09 |     2 |
+----+------------+------------+-------+
0 голосов
/ 24 июня 2019

Попробуйте использовать функцию MySQL DATEDIFF ():

MySQL DATEDIFF () возвращает количество дней между двумя датами или датами.Эта функция вычисляет только часть даты из каждого выражения.

DATEDIFF(expr1,expr2);

Нажмите здесь, чтобы найти примеры

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