English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
이 튜토리얼에서는 SQL에서 날짜와 시간을 사용하는 방법을 배울 것입니다.
문자와 숫자 외에도, 데이터베이스에 날짜와 시간을 저장해야 하는 경우가 많습니다./또는 시간 값, 예를 들어 사용자의 출생일, 고용된 직원의 고용일, 미래 이벤트의 날짜, 테이블에서 특정 행을 생성하거나 수정한 날짜와 시간 등을 저장해야 합니다.
이러한 유형의 데이터는 일시 데이터로 불리며, 각 데이터베이스 엔진은 이를 저장하기 위한 기본 저장 형식과 데이터 타입을 제공합니다. 다음 표는 MySQL 데이터베이스 서버가 지원하는 날짜와 시간 데이터 타입을 보여줍니다.
타입 | 기본 형식 | 허용 값 |
---|---|---|
DATE | YYYY-MM-DD | 1000-01-01 - |
TIME | HH:MM:SS 또는 HHH:MM:SS | -838:59:59 - |
DATETIME | YYYY-MM-DD HH:MM:SS | 1000-01-01 00:00:00 - |
TIMESTAMP | YYYY-MM-DD HH:MM:SS | 1970-01-01 00:00:00 - |
YEAR | YYYY | 1901 - |
DATE 값의 형식은 YYYY-MM-DD, YYYY는 전년도를 나타냅니다.4자릿수), MM과 DD는 날짜의 월과 일 부분(두 번째 자릿수)을 나타냅니다. 시간 값은 일반적으로 HH:MM:SS 형식으로 사용되며, HH, MM, SS는 시간의 시간, 분, 초 부분을 나타냅니다.
다음은 데이터베이스 테이블에 날짜 값을 삽입하는 방법을 보여줍니다:
INSERT INTO employees (emp_name, hire_date, salary) VALUES ('Adam Smith', '2015-06-24 4500);
주의:MySQL에서는 시간 부분의 값이 더 크게 나타날 수 있습니다. 이는 MySQL이 이를 실행 시간으로 간주하기 때문입니다. 따라서 시간 데이터 타입은 일일 시간(24시간 이하)을 나타내는 것 이상으로 사용될 수 있습니다.24시간(예: 24시간), 이는 두 이벤트 간의 시간 간격을 나타내기도 합니다. 가능성이 큰 경우도 있습니다.24시간, 심지어 음수 값도 될 수 있습니다.
대형 애플리케이션 데이터베이스를 사용할 때, 일반적으로 데이터베이스에 기록 생성 시간이나 마지막 수정 시간을 저장해야 합니다. 예를 들어, 사용자 등록 시나 사용자가 마지막으로 비밀번호를 업데이트한 날짜와 시간 등을 저장합니다.
MySQL에서는 NOW() 함수를 사용하여 현재 타임스탬프를 입력할 수 있습니다. 예를 들어:
-- MySQL 데이터베이스 문법 INSERT INTO users (name, birth_date, created_at) VALUES ('Bilbo Baggins', '1998-04-16', NOW());
만약 현재 날짜와 시간을 수동으로 입력하지 않고 싶다면, TIMESTAMP와 DATETIME 데이터 유형의 자동 초기화와 자동 업데이트 속성을 사용하면 됩니다.
자동 속성을 할당하려면, 열 정의에서 DEFAULT CURRENT_TIMESTAMP와 ON UPDATE CURRENT_TIMESTAMP 절을 지정하십시오. 예를 들어:
-- MySQL 데이터베이스 문법 CREATE TABLE users ( id INT(4) NOT NULL PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL UNIQUE, birth_date DATE NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP );
주의:DATETIME 데이터 유형의 자동 초기화와 업데이트는 MySQL에서만 가능합니다. 5.6.5또는 고급 버전에서 사용할 수 있습니다. 고급 버전이 아닌 경우 TIMESTAMP를 사용하십시오.
때문에, MySQL에서 특정 날짜나 시간의 일부를 추출하기 위해 특별히 설계된 함수를 사용할 수 있습니다. 예를 들어, YEAR(), MONTH(), DAYOFMONTH(), MONTHNAME(), DAYNAME(), HOUR(), MINUTE(), SECOND() 등.
다음 SQL 문은 birth_date 열 값의 연도 부분을 추출합니다. 예를 들어, 어떤 사용자의 생일이1987-01-14이렇게 되면 YEAR(birth_date)는1987。
mysql> SELECT name, YEAR(birth_date) FROM users;
동일하게, DAYOFMONTH() 함수를 사용하여 월의 특정 날을 가져올 수 있습니다. 예를 들어, 어떤 사용자의 birth_date가1986-10-06그렇다면 DAYOFMONTH(birth_date)는 반환됩니다.6。
mysql> SELECT name, DAYOFMONTH(birth_date) FROM users;
결과 집합에서 더 설명적이고 읽을 수 있는 날짜 형식을 사용하려면 DATE_FORMAT()와 TIME_FORMAT() 함수를 사용하여 기존의 날짜와 시간 값을 다시 구성할 수 있습니다.
아래의 SQL 문장은 더 쉽게 읽을 수 있는 형식으로 설정됩니다.users테이블birth_date컬럼의 값의 형식, 예를 들어1987년1월14일까지1987년1월14일의 값.
mysql> SELECT name, DATE_FORMAT(birth_date, '%M %e, %Y') FROM users;