Mysql
 sql >> база данни >  >> RDS >> Mysql

Връщане на дати без почивни дни

Можем да използваме DayName () функция за получаване на името на деня от седмицата, съответстващ на дата. Ще използваме резултата от тази функция, за да ограничим почивните дни до НЕ ВЪВ ('събота', 'неделя') .

Освен това ще трябва да увеличим диапазона на генератора на числа до 10 . Защото има възможност да попаднем на 2 уикенда (общо 4 дни) от двете страни на 5 делнични дни.

И така, имаме нужда от 2 (първа двойка уикенд дни) + 5 (делнични дни) + 2 (втора двойка уикенд дни) + 1 (6-ти делничен ден) =10 дати за разглеждане. Пример за този крайен случай би бил, когато въведената дата е неделя.

Ще трябва да използваме LIMIT 6 за ограничаване на резултата до 6 дни само в случаите, които не са крайни.

Схема (MySQL v5.7)

СЪЗДАВАНЕ НА ТАБЛИЦА `HELPER_SEQ` (`I` tinyint(3) БЕЗ ПОДПИСАНИЯ НЕ НУЛЕВА); ВМЕСТЕ В `HELPER_SEQ` (`I`) СТОЙНОСТИ (1),(2),(3),(4) ,(5),(6),(7),(8),(9),(10); 

Запитване

ИЗБЕРЕТЕ ДАТА_ФОРМАТ((ДАТА('2018-11-21') - ИНТЕРВАЛ(S.`I` - 1) ДЕН), '%Y-%m-%d') КАТО VARFROM `HELPER_SEQ` КАТО S WHERE S.`I` <=10 И DAYNAME(DATE_FORMAT((DATE('2018-11-21') - INTERVAL(S.`I` - 1) DAY), '%Y-%m-%d) ')) НЕ В ('СЪБОТА', 'НЕДЕЛЯ') ПОРЪЧКА ПО VAR DESCLIMIT 6; 

Резултат

<предварителен код>| VAR || ---------- || 21.11.2018 || 2018-11-20 || 2018-11-19 || 2018-11-16 || 2018-11-15 || 14.11.2018 г. |

Преглед на DB Fiddle

Демонстрация на Edge Case – Дата на въвеждане:25 ноември 2018 г. (неделя)

СЪЗДАВАНЕ НА ТАБЛИЦА `HELPER_SEQ` (`I` tinyint(3) БЕЗ ПОДПИСАНИЯ НЕ НУЛЕВА); ВМЕСТЕ В `HELPER_SEQ` (`I`) СТОЙНОСТИ (1),(2),(3),(4) ,(5),(6),(7),(8),(9),(10); 

Запитване №2

ИЗБЕРЕТЕ ДАТА_ФОРМАТ((ДАТА('2018-11-25') - ИНТЕРВАЛ(S.`I` - 1) ДЕН), '%Y-%m-%d') КАТО VARFROM `HELPER_SEQ` КАТО S WHERE S.`I` <=10 И DAYNAME(DATE_FORMAT((DATE('2018-11-25') - INTERVAL(S.`I` - 1) DAY), '%Y-%m-%d) ')) НЕ В ('СЪБОТА', 'НЕДЕЛЯ') ПОРЪЧКА ПО VAR DESCLIMIT 6; 

Резултат

<предварителен код>| VAR || ---------- || 2018-11-23 || 2018-11-22 || 21.11.2018 || 2018-11-20 || 2018-11-19 || 16.11.2018 |

Преглед на DB Fiddle




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Отказ на база данни в Jboss източници на данни

  2. Постоянен срещу непостоянен - ​​Кое да използвам?

  3. Как да сравните производителността на MySQL с помощта на SysBench

  4. Как да попитам javascript да изчака mysql да присвои стойност на php променлива?

  5. Търсенето показва всички продукти