Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL 테이블에서 날짜별로 레코드를 검색하는 방법

MySQL 테이블에서 날짜별 레코드 검색하기

먼저 예제로 사용할 테이블을 살펴보겠습니다. 아래의 'Order123' 테이블은 상품명(ProductName), 수량(Quantity), 주문일(OrderDate) 세 개의 컬럼으로 구성되어 있습니다.

mysql> Select * from Order123;
+-------------+----------+------------+
| ProductName | Quantity | OrderDate  |
+-------------+----------+------------+
| A           | 100      | 2017-05-25 |
| B           | 105      | 2017-05-25 |
| C           | 55       | 2017-05-25 |
| D           | 250      | 2017-05-26 |
| E           | 500      | 2017-05-26 |
| F           | 500      | 2017-05-26 |
| G           | 500      | 2017-05-27 |
| H           | 1000     | 2017-05-27 |
+-------------+----------+------------+
8 rows in set (0.00 sec)

WHERE 절로 특정 날짜 조회하기

특정 날짜, 예를 들어 2017년 5월 25일에 접수된 주문 내역을 확인하고 싶다면 WHERE 절에서 OrderDate 컬럼을 원하는 날짜와 비교하면 됩니다.

mysql> Select ProductName, Quantity from Order123 where OrderDate = '2017-05-25';
+-------------+----------+
| ProductName | Quantity |
+-------------+----------+
| A           | 100      |
| B           | 105      |
| C           | 55       |
+-------------+----------+
3 rows in set (0.00 sec)

실행 결과, OrderDate가 정확히 '2017-05-25'인 레코드 3건(A, B, C)이 반환되었습니다. 이처럼 날짜 타입 컬럼에는 문자열 형태의 날짜('YYYY-MM-DD')를 직접 비교 조건으로 사용할 수 있습니다.

날짜와 시간이 함께 저장된 경우

그런데 만약 OrderDate 컬럼에 시간 정보까지 함께 저장되어 있다면 어떨까요? 예를 들어 값이 '2017-05-25 14:30:00'처럼 저장되어 있다면, 단순한 등호(=) 비교로는 시간까지 일치하는 경우에만 매칭되기 때문에 원하는 결과를 얻기 어렵습니다.

이럴 때는 MySQL의 DATE() 함수를 활용하면 됩니다. DATE() 함수는 DATETIME 값에서 날짜 부분만 추출해 주므로, 시간과 무관하게 특정 날짜의 모든 레코드를 검색할 수 있습니다.

mysql> Select ProductName, Quantity from Order123 where date(OrderDate) = '2017-05-25';

이 쿼리는 OrderDate에 시간이 포함되어 있더라도 날짜가 '2017-05-25'인 모든 주문을 정확히 조회해 줍니다. 참고로 기간별 검색이 필요하다면 BETWEEN 연산자나 '>=', '<' 비교 연산자를 함께 사용하면 더욱 유연하게 데이터를 조회할 수 있습니다.