MySQL에서 두 날짜 비교
이 기사에서는 MySQL에서 두 날짜를 비교하는 방법을 설명합니다. 이 작업을 수행하는 세 가지 다른 접근 방식이 있습니다.
WHERE
절 사용BETWEEN
연산자 사용DATE_ADD
기능 사용
테이블 생성 및 값 삽입
먼저 직원용 테이블을 다음과 같이 생성합니다.
Create table employee (empid int primary key, fname varchar(10), lname varchar(20), logindate timestamp not null default CURRENT_TIMESTAMP);
이제 데모를 위해 테이블에 몇 가지 값을 삽입하겠습니다.
INSERT INTO employee('empid', 'fname', 'lname')VALUES (1,'aaa','bbb');
INSERT INTO employee VALUES
(201,'Peter','Parker','2001-01-01 16:15:00'),
(202,'Thor','Odinson','2021-08-02 12:15:00'),
(204,'Loki','Laufeyson','2009-08-03 10:43:24');
WHERE
절을 사용하여 두 날짜 비교
아래 쿼리는 주어진 날짜 범위 사이의 모든 레코드를 추출하는 SELECT
쿼리를 사용하는 매우 간단한 접근 방식입니다.
SELECT * FROM employee WHERE logindate >= '2000-07-05' AND logindate < '2011-11-10';
BETWEEN
연산자를 사용하여 두 날짜 비교
먼저 MySQL에서 날짜를 문자열로 변환해야 합니다. 이 작업을 수행하기 위해 DATE 함수를 사용하여 Datetime에서 날짜를 추출합니다.
DATE 함수의 구문은 다음과 같습니다.
DATE(column name)
logindate 열의 인덱스를 활용하려면 대신 이것을 시도할 수 있습니다. 사이 연산자는 지정된 두 날짜 표현식 사이에 날짜 열이 있는 모든 레코드를 선택하는 데 사용할 수도 있습니다.
SELECT * FROM employee WHERE DATE(logindate) BETWEEN '2000-07-05' AND '2011-11-10';
MySQL은 하나의 yyyy-mm-dd
날짜 형식만 허용하므로 문자열 날짜 표현식의 형식을 지정해야 할 때마다 이 형식을 사용해야 합니다.
이제 비교하여 DATE() 함수의 필요성에 대한 쿼리가 있을 수 있습니다.
따라서 MySQL DATE() 함수는 DATETIME 또는 TIMESTAMP 열의 날짜 부분을 아래와 같이 문자열로 추출합니다.
mysql> SELECT DATE('2005-08-28 01:02:03'); -> '2005-08-28'
DATE()
함수는 MySQL이 비교를 위해 열 값의 날짜 부분만 고려하도록 사용됩니다. DATE()
함수를 사용하지 않으면 MySQL은 열의 시간 부분을 문자열 표현식과 비교합니다. 이 옵션을 사용하면 모든 비교에 지정된 문자열 표현식이 결과 집합의 일부로 포함됩니다.
위의 쿼리에서와 같이 DATETIME 또는 TIME-STAMP 열을 날짜를 나타내는 문자열과 비교할 때 MySQL은 비교를 위해 열 및 표현식 값을 모두 긴 정수 유형으로 변환합니다.
날짜 열을 문자열과 비교하더라도 날짜 열 값을 문자열로 수동으로 변환할 필요가 없기 때문입니다.
DATE_ADD
함수를 사용하여 두 날짜 비교
또 다른 접근 방식은 DATE_ADD()
함수를 사용하는 것입니다. 그러나 이 접근 방식에는 DATE_ADD()
함수가 반드시 필요한 것은 아닙니다. 그러나 원하는 날짜 이후 몇 분을 솔루션의 일부로 고려하고 싶다면 이것을 사용할 수 있습니다. 예를 들어, 지정된 날짜 범위 사이의 모든 레코드를 원하지만 지정된 제한 후 15분 후에 삽입된 레코드를 고려할 수 있는 경우입니다. 이 기능은 매우 유용합니다.
DATE_ADD() 함수는 지정된 날짜에 지정된 시간 또는 날짜 간격을 추가한 다음 날짜를 반환하는 데 사용됩니다. DATE_ADD 함수는 두 개의 매개변수를 사용합니다. 첫 번째 매개변수는 날짜이고 두 번째 매개변수는 추가할 간격입니다.
select * from employee
where logindate between '2000-07-05' and DATE_ADD('2011-07-10',INTERVAL 15 MINUTE);