CodeGym/Java курс/All lectures for BG purposes/Функции за дата, практически примери

Функции за дата, практически примери

На разположение

Търсят се събития през последните 30 дни

Друга често срещана задача е търсенето на редове, които принадлежат към определен период от време. По принцип това не е трудно, ако началната и крайната дата на диапазона са фиксирани: SQL може да сравнява датите също толкова добре, колкото и числата.

Към дати могат да се прилагат оператори за сравнение: < , > , <= и т.н. Освен това има специален оператор BETWEEN, който може да работи и с дати. Например, нека напишем заявка, която ще избере всички задачи от tableта със задачи, които трябва да бъдат изпълнени през лятото на 2022 г. Заявката ще изглежда така:

SELECT * FROM task  
WHERE task.deadline BETWEEN '2022-06-01' AND '2022-08-31'

Резултатът от тази заявка ще бъде:

document за самоличност Emploee_id име краен срок
1 1 Коригиране на грешка във фронтенда 2022-06-01
2 2 Коригиране на грешка в бекенда 2022-06-15
3 5 Купи кафе 2022-07-01
4 5 Купи кафе 2022-08-01

Но Howво да напишем в заявката, ако искаме да получим задачи например за последните 30 дни. Когато последните 30 дни са пряко обвързани с времето за изпълнение на заявката. Тоест, ако заявката се изпълни на 25 юли, тогава трябва да изберете дати от 25 юни до 24 юли. Как да обвържа период от време с текущия час?

За да направите това, използвайте функцията за добавяне на дата:

DATE_ADD (date, INTERVAL expression units)

Мисля, че ще бъде по-лесно да го обясня с няколко примера:

# Заявка Резултат
1 DATE_ADD('2022-06-04', ИНТЕРВАЛ 5 ДЕН) 2022-06-09
2 DATE_ADD('2022-06-04', ИНТЕРВАЛ 4 СЕДМИЦА) 2022-07-02
3 DATE_ADD('04.06.2022', ИНТЕРВАЛ 2 МЕСЕЦА) 2022-08-04
4
5 DATE_SUB('2022-06-04', ИНТЕРВАЛ 5 ДЕН) 2022-05-30
6 DATE_SUB('2022-06-04', ИНТЕРВАЛ 4 СЕДМИЦА) 2022-05-07
7 DATE_SUB('2022-06-04', ИНТЕРВАЛ 2 МЕСЕЦА) 2022-04-04

Между другото, определен брой дни, седмици, месеци и години също могат да бъдат извадени от определена дата.

И ако се върнем към нашата заявка - да получим данни за последните 30 дни, тогава имаме нужда от две дати в този диапазон:

  • CURDATE() - край на диапазона
  • DATE_SUB( CURDATE() , INTERVAL 30 DAY) - начало на диапазона

Заявката ще изглежда така:

SELECT * FROM task WHERE task.deadline  
BETWEEN DATE_SUB( CURDATE() , INTERVAL 30 DAY) AND CURDATE() 

Резултатът от тази заявка ще бъде като този (имам днес 4 юни 2022 г.):

document за самоличност Emploee_id име краен срок
1 1 Коригиране на грешка във фронтенда 2022-06-01

Как да намерите разликата между две дати

И още една полезна функция. Понякога може да се наложи да изчислите разликата между две дати в дни. За да направите това, SQL има специална функция - DATEDIFF ().

Много е лесно да се работи с нея:

DATEDIFF (date 1, date 2)

Втората дата просто се изважда от първата дата. Ако date2 идва след date1, тогава резултатът ще бъде отрицателен.

Между другото, можем да пренапишем предишната си заявка с помощта на функцията DATEDIFF(). Трябва да изберем всички задачи от tableта със задачи, чийто краен срок се различава от текущата дата с не повече от 30 дни. Ето How ще изглежда това искане:

SELECT * FROM task WHERE DATEDIFF(task.deadline, CURDATE() ) < 30

Резултатът от тази заявка ще бъде като този (имам днес 4 юни 2022 г.):

document за самоличност Emploee_id име краен срок
1 1 Коригиране на грешка във фронтенда 2022-06-01
2 2 Коригиране на грешка в бекенда 2022-06-15
3 5 Купи кафе 2022-07-01

Този път SQL намери цели три реда. Помислете защо последния път имаше един ред, а този път са три?

Коментари
  • Популярен
  • Нов
  • Стар
Трябва да сте влезли, за да оставите коментар
Тази страница все още няма коментари