날짜 범위에 해당하는 레코드를 조회하려면 MySQL의 BETWEEN 연산자를 사용하면 됩니다. 이번 글에서는 학생의 생년월일을 저장한 뒤, 현재 나이가 특정 범위(예: 20~21세)에 해당하는 레코드만 추출하는 방법을 단계별로 살펴보겠습니다.
1. 테이블 생성하기
먼저 학생 생년월일을 저장할 테이블을 생성합니다.
mysql> create table DemoTable863(StudentDateOfBirth date); Query OK, 0 rows affected (0.56 sec)
2. 샘플 데이터 삽입하기
INSERT 명령어를 사용해 몇 개의 레코드를 삽입합니다.
mysql> insert into DemoTable863 values('1998-01-10');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable863 values('2000-10-15');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable863 values('2003-04-20');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable863 values('2005-12-31');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable863 values('1999-07-01');
Query OK, 1 row affected (0.27 sec)3. 전체 레코드 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable863;
실행 결과는 다음과 같습니다.
+--------------------+ | StudentDateOfBirth | +--------------------+ | 1998-01-10 | | 2000-10-15 | | 2003-04-20 | | 2005-12-31 | | 1999-07-01 | +--------------------+ 5 rows in set (0.00 sec)
4. 나이 범위로 필터링하는 쿼리
생년월일(DOB)을 기준으로 현재 나이가 20세 이상 21세 이하인 학생만 조회하려면 YEAR() 함수로 출생 연도와 현재 연도의 차이를 계산한 후, 그 값에 BETWEEN 조건을 적용합니다.
mysql> select *from DemoTable863 where (YEAR(NOW()) - YEAR(StudentDateOfBirth)) BETWEEN 20 AND 21;
실행 결과는 다음과 같습니다.
+--------------------+ | StudentDateOfBirth | +--------------------+ | 1998-01-10 | | 1999-07-01 | +--------------------+ 2 rows in set (0.03 sec)
참고 사항
위 방식은 연도 차이만 계산하므로, 생일이 아직 지나지 않은 경우 실제 만 나이보다 1살 많게 계산될 수 있습니다. 보다 정확한 나이 계산이 필요하다면 TIMESTAMPDIFF(YEAR, StudentDateOfBirth, NOW()) 함수를 사용하는 것이 좋습니다.