• MySQL매뉴얼
    • MySQL 5.6 매뉴얼
    • MySQL 5.1 매뉴얼
    • MySQL 5.0 매뉴얼
    • MySQL HA 매뉴얼
  • 기술문서
    • Xtrabackup 구성
    • 메모리 사용량 모니터링
  • 라이선스
  • 온라인문의
  • 회사소개
  • → 목 록 (MySQL5.6 한글메뉴얼) [close]
  • 1. MySQL 5.6 새로운 기능
  • 2. MySQL 설치 및 업그레이드
  • 3. MySQL Tutorial
  • 1. 서버에 연결 그리고 서버와 연결 끊기
    2. 쿼리 입력
    3. 데이터베이스 생성 및 사용
    1. 데이터베이스 생성 및 선택
    2. 테이블 만들기
    3. Loading Data into a Table
    4. 테이블에서 정보 검색
    1. 모든 데이터 선택
    2. 특정 행 선택
    3. 특정 컬럼의 선택
    4. 행 정렬
    5. 날짜 계산
    6. NULL 값 조작
    7. Pattern Matching
    8. Counting Rows
    9. 여러 테이블의 사용
    4. 데이터베이스 및 테이블 정보 가져 오기
    5. 배치 모드에서의 MySQL의 사용
    6. 일반적인 쿼리의 예제
    7. Apache와 MySQL 사용
  • 4. MySQL 프로그램
  • 5. MySQL 서버관리
  • 6. 보안
  • 7. 백업 및 복구
  • 8. 최적화
  • 9. Language Structure(언어구조)
  • 10. Character Sets(Globalization)
  • 11. 데이터형(Data Types)
  • 12. 함수와 연산자
  • 13. SQL 문법
  • 14. InnoDB 스토리지 엔진
  • 15. 기타 스토리지 엔진
  • 16. 고가용성 및 확장성
  • 17. 리플리케이션
  • 18. MySQL Cluster
  • 19. 파티셔닝
  • 20. Stored Programs and Views
  • 21. INFORMATION_SCHEMA
  • 22. PERFORMANCE SCHEMA
  • 23. 컨넥터 및 API
  • 24. MySQL 확장
  • 25. MySQL Enterprise Edition
  • 26. MySQL Workbench
  • 27. 제약 및 제한
  • 28. MySQL 5.7 새로운 기능

3.3.4.5 날짜 계산

MySQL은 나이 계산이나 날짜의 일부 추출 등 날짜 계산에 사용할 수있는 함수가 일부 포함되어 있습니다.

각각의 애완 동물이 몇 살인지를 판별하려면 TIMESTAMPDIFF() 함수를 사용합니다. 인수는 결과를 표현하는 단위 및 차에 대한 두 날짜입니다. 다음 쿼리는 각 애완 동물의 생년월일, 현재 날짜 및 나이가 표시됩니다. 출력의 마지막 컬럼 레이블에 의미를 부여하는 별칭 ( age )가 사용되고 있습니다.

 mysql> SELECT name, birth, CURDATE(),
    -> TIMESTAMPDIFF(YEAR,birth,CURDATE()) AS age
    -> FROM pet;
+----------+------------+------------+------+
| name     | birth      | CURDATE()  | age  |
+----------+------------+------------+------+
| Fluffy   | 1993-02-04 | 2003-08-19 |   10 |
| Claws    | 1994-03-17 | 2003-08-19 |    9 |
| Buffy    | 1989-05-13 | 2003-08-19 |   14 |
| Fang     | 1990-08-27 | 2003-08-19 |   12 |
| Bowser   | 1989-08-31 | 2003-08-19 |   13 |
| Chirpy   | 1998-09-11 | 2003-08-19 |    4 |
| Whistler | 1997-12-09 | 2003-08-19 |    5 |
| Slim     | 1996-04-29 | 2003-08-19 |    7 |
| Puffball | 1999-03-30 | 2003-08-19 |    4 |
+----------+------------+------------+------+

이 쿼리는 제대로 작동하지만 결과 행을 어떤 순서로 볼 때 쉽게 파악할 것입니다. 따라서에는 ORDER BY name 절을 추가하여 출력을 이름별로 정렬 할 수 있습니다.

 mysql> SELECT name, birth, CURDATE(),
    -> TIMESTAMPDIFF(YEAR,birth,CURDATE()) AS age
    -> FROM pet ORDER BY name;
+----------+------------+------------+------+
| name     | birth      | CURDATE()  | age  |
+----------+------------+------------+------+
| Bowser   | 1989-08-31 | 2003-08-19 |   13 |
| Buffy    | 1989-05-13 | 2003-08-19 |   14 |
| Chirpy   | 1998-09-11 | 2003-08-19 |    4 |
| Claws    | 1994-03-17 | 2003-08-19 |    9 |
| Fang     | 1990-08-27 | 2003-08-19 |   12 |
| Fluffy   | 1993-02-04 | 2003-08-19 |   10 |
| Puffball | 1999-03-30 | 2003-08-19 |    4 |
| Slim     | 1996-04-29 | 2003-08-19 |    7 |
| Whistler | 1997-12-09 | 2003-08-19 |    5 |
+----------+------------+------------+------+

출력을 name 대신 age 로 정렬하려면 다른 ORDER BY 절을 사용합니다.

 mysql> SELECT name, birth, CURDATE(),
    -> TIMESTAMPDIFF(YEAR,birth,CURDATE()) AS age
    -> FROM pet ORDER BY age;
+----------+------------+------------+------+
| name     | birth      | CURDATE()  | age  |
+----------+------------+------------+------+
| Chirpy   | 1998-09-11 | 2003-08-19 |    4 |
| Puffball | 1999-03-30 | 2003-08-19 |    4 |
| Whistler | 1997-12-09 | 2003-08-19 |    5 |
| Slim     | 1996-04-29 | 2003-08-19 |    7 |
| Claws    | 1994-03-17 | 2003-08-19 |    9 |
| Fluffy   | 1993-02-04 | 2003-08-19 |   10 |
| Fang     | 1990-08-27 | 2003-08-19 |   12 |
| Bowser   | 1989-08-31 | 2003-08-19 |   13 |
| Buffy    | 1989-05-13 | 2003-08-19 |   14 |
+----------+------------+------------+------+

유사한 쿼리를 사용하여 죽은 애완 동물의 사망시 나이를 요청할 수 있습니다. 어떤 동물인지를 판단하려면 death 값이 NULL 여부를 확인합니다. 다음은 NULL 이 아닌 값에 대한 death 값과 birth 값의 차이를 계산합니다.

mysql> SELECT name, birth, death,
    -> TIMESTAMPDIFF(YEAR,birth,death) AS age
    -> FROM pet WHERE death IS NOT NULL ORDER BY age;
+--------+------------+------------+------+
| name   | birth      | death      | age  |
+--------+------------+------------+------+
| Bowser | 1989-08-31 | 1995-07-29 |    5 |
+--------+------------+------------+------+

이 쿼리는 death <> NULL 이 아닌 death IS NOT NULL 을 사용합니다. NULL 은 보통 비교 연산자를 사용하여 비교할 수없는 특별한 가치이기 때문입니다. 이에 대해서는 나중에 설명합니다. 섹션 3.3.4.6 "NULL 값 작업" 을 참조하십시오.

다음달 생일을 맞이하는 애완 동물을 조사하려면 어떻게합니까? 이러한 계산의 경우 연도와 날짜는 무관하며 birth 컬럼의 달의 부분을 추출하기 만하면됩니다. MySQL은 YEAR() , MONTH() , DAYOFMONTH() 등 날짜의 일부를 추출하는 함수가 일부 포함되어 있습니다. 여기에서는 MONTH() 함수가 적합합니다. 작동 원리를 확인하기 위해 birth 와 MONTH(birth) 의 값을 모두 표시하는 간단한 쿼리를 실행합니다.

mysql> SELECT name, birth, MONTH(birth) FROM pet;
+----------+------------+--------------+
| name     | birth      | MONTH(birth) |
+----------+------------+--------------+
| Fluffy   | 1993-02-04 |            2 |
| Claws    | 1994-03-17 |            3 |
| Buffy    | 1989-05-13 |            5 |
| Fang     | 1990-08-27 |            8 |
| Bowser   | 1989-08-31 |            8 |
| Chirpy   | 1998-09-11 |            9 |
| Whistler | 1997-12-09 |           12 |
| Slim     | 1996-04-29 |            4 |
| Puffball | 1999-03-30 |            3 |
+----------+------------+--------------+

다음달 생일을 맞이하는 애완 동물을 찾을 수 쉽습니다. 지난 4 월이라고합니다. 달의 값은 4 이기 때문에 5 월 (월 5 )에 태어난 애완 동물은 다음과 같이 찾을 수 있습니다.

mysql> SELECT name, birth FROM pet WHERE MONTH(birth) = 5;
+-------+------------+
| name  | birth      |
+-------+------------+
| Buffy | 1989-05-13 |
+-------+------------+

지난 12 월의 경우는 다소 복잡합니다. 달의 번호 ( 12 )에 단순히 1을 가산 해 13 월에 태어난 애완 동물을 찾는다는 것은 없습니다. 그러한 달은 존재하지 않기 때문입니다. 대신 1 월 (월 1 )에 태어난 애완 동물을 찾습니다.

현재이 무엇 월에도 작동하는 쿼리를 작성하면 특정 월의 번호를 사용할 필요가 없습니다. DATE_ADD() 를 사용하면 소정의 날짜에 시간 간격을 추가 할 수 있습니다. CURDATE() 의 값에 1 개월을 가산하고 월 부분을 MONTH() 에서 추출하면 생일을 조사하는 달을 얻을 수 있습니다.

 mysql> SELECT name, birth FROM pet
     -> WHERE MONTH(birth) = MONTH(DATE_ADD(CURDATE(),INTERVAL 1 MONTH));

현재의 달의 값이 12 의 경우 모듈로 함수 ( MOD )를 적용하여 0 에 배치 후 1 을 가산하는 방법에서도 동일한 작업을 수행 할 수 있습니다.

 mysql> SELECT name, birth FROM pet
     -> WHERE MONTH(birth) = MOD(MONTH(CURDATE()), 12) + 1;

MONTH() 는 1 에서 12 까지의 숫자를 반환합니다. 또한 MOD(something,12) 는 0 에서 11 까지의 숫자를 반환합니다. 따라서 MOD() 의 후 가산을하지 않으면 11 월에서 1 월에 진행하게됩니다.

서울시 강남구 영동대로 602 6층
TEL: 02-6061-0006  /  E: csr@mysqlkorea.com
주식회사 이노클러스터  등록번호 : 727-86-02261
Copyright © innocluster Co. ltd. all rights reserved