지난 30일 동안의 이벤트를 찾고 있습니다.

또 다른 일반적인 작업은 특정 날짜 범위에 속하는 행을 검색하는 것입니다. 원칙적으로 범위의 시작 날짜와 종료 날짜가 고정되어 있으면 어렵지 않습니다. SQL은 숫자뿐만 아니라 날짜도 비교할 수 있습니다.

날짜에 비교 연산자를 적용할 수 있습니다: < , > , <= 등. 또한 날짜에도 사용할 수 있는 특별한 BETWEEN 연산자가 있습니다. 예를 들어 2022년 여름에 수행해야 하는 작업 테이블에서 모든 작업을 선택하는 쿼리를 작성해 보겠습니다. 요청은 다음과 같습니다.

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

이 쿼리의 결과는 다음과 같습니다.

ID employee_id 이름 마감 시간
1 1 프런트엔드의 버그 수정 2022-06-01
2 2 백엔드의 버그 수정 2022-06-15
5 커피를 사다 2022-07-01
4 5 커피를 사다 2022-08-01

그러나 예를 들어 지난 30일 동안의 작업을 받으려는 경우 요청에 무엇을 작성해야 합니까? 지난 30일은 쿼리 실행 시간과 직접 연결됩니다. 즉, 쿼리가 7월 25일에 실행되는 경우 6월 25일부터 7월 24일까지의 날짜를 선택해야 합니다. 날짜 범위를 현재 시간에 바인딩하는 방법은 무엇입니까?

이렇게 하려면 날짜 추가 기능을 사용하십시오.

DATE_ADD (date, INTERVAL expression units)

몇 가지 예를 들어 설명하면 더 쉬울 것 같습니다.

# 요구 결과
1 DATE_ADD('2022-06-04', 간격 5일) 2022-06-09
2 DATE_ADD('2022-06-04', INTERVAL 4주) 2022-07-02
DATE_ADD('2022-06-04', 간격 2개월) 2022-08-04
4
5 DATE_SUB('2022-06-04', INTERVAL 5일) 2022-05-30
6 DATE_SUB('2022-06-04', INTERVAL 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() 

이 쿼리의 결과는 다음과 같습니다(오늘은 2022년 6월 4일입니다).

ID employee_id 이름 마감 시간
1 1 프런트엔드의 버그 수정 2022-06-01

두 날짜의 차이를 찾는 방법

그리고 또 다른 유용한 기능. 경우에 따라 두 날짜의 차이를 일 단위로 계산해야 할 수도 있습니다. 이를 위해 SQL에는 DATEDIFF()라는 특수 함수가 있습니다.

그녀와 함께 일하는 것은 매우 쉽습니다.

DATEDIFF (date 1, date 2)

두 번째 날짜는 단순히 첫 번째 날짜에서 뺍니다. date2가 date1 이후에 오면 결과는 음수가 됩니다.

그런데 DATEDIFF() 함수를 사용하여 이전 쿼리를 다시 작성할 수 있습니다. 기한이 현재 날짜와 30일 이내로 다른 작업 테이블에서 모든 작업을 선택해야 합니다. 해당 요청은 다음과 같습니다.

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

이 쿼리의 결과는 다음과 같습니다(오늘은 2022년 6월 4일입니다).

ID employee_id 이름 마감 시간
1 1 프런트엔드의 버그 수정 2022-06-01
2 2 백엔드의 버그 수정 2022-06-15
5 커피를 사다 2022-07-01

이번에는 SQL이 최대 세 개의 행을 찾았습니다. 지난번에는 한 줄이 있었는데 이번에는 세 줄인 이유를 생각해 보십시오.