데이터 계산

Database/Mysql 2007. 2. 7. 21:31
데이터 계산하기

Mysql은 날짜로 나이를 계산하고, 날짜의 특정 부분을 추출하는 여러가지 함수를 제공한다.

각 이름의 현재날짜 - 생일날짜로 나이 계산

mysql> SELECT name, birth, CURDATE(),
   -> ( YEAR( CURDATE() ) - YEAR( birth ) )
   -> - ( RIGHT( CURDATE(), 5 ) < RIGHT( birth, 5 ) )
   -> AS age
   -> FROM pet;
+-------+------------+------------+------+
| name  | birth      | CURDATE()  | age  |
+-------+------------+------------+------+
| Nabi  | 2006-12-31 | 2006-12-21 |   -1 |
| Hoya  | 2006-10-31 | 2006-12-21 |    0 |
| Puppy | 2006-12-04 | 2006-12-21 |    0 |
| Taeji | 2004-10-02 | 2006-12-21 |    2 |
+-------+------------+------------+------+

4 rows in set (0.00 sec)
- YEAR() : 날짜에서 연도 부분을 가져온다.
- CURDATE() : 현재 날짜를 가져온다.
- RIGHT() : 첫번째 매개변수의 오른쪽부터 두번째 매개변수의 자리수까지를 반환한다.
- as(alias)를 사용하여 전체 수식을 이해하기 쉬운 문자(age)로 사용한다.

mysql> SELECT name, birth, CURDATE(),
   -> ( YEAR( CURDATE() ) - YEAR( birth ) )
   -> - ( RIGHT( CURDATE(), 5 ) < RIGHT( birth, 5 ) )
   -> AS age
   -> FROM pet;
   -> ORDER BY age;
- ORDER BY 구문을 사용하여 age 로 정렬할 수도 있다.

mysql> SELECT name, birth, death
   -> FROM pet
   -> WHERE death IS NOT NULL;
+-------+------------+------------+
| name  | birth      | death      |
+-------+------------+------------+
| Taeji | 2004-10-02 | 2006-03-30 |
+-------+------------+------------+

1 row in set (0.00 sec)
- death 값이 채워진(NULL이 아닌) 레코드의 'name, birth, death' 필드를 선택한다.
- 'death <> NULL'을 사용하지 않고 'death IS NOT NULL'을 사용하는 이유는 NULL이 일반적인 비교 연산자를 가지고는 비교 연산을 할 수 없는 특별한 값을 가지기 때문이다.

WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,