hyperskill - Date & Time data types - 원문

SQL은 테이블에서 조직화 된 서로다른 데이터 타입들을 작업합니다.

당신은 숫자, 문자열, 논리 데이터를 저장할 수 있게 허용 해 주는 기초적인 데이터 타입들에 대해 알고 있습니다.

우리가 매일 마주하는 또다른 것이 있습니다.

당신이 일어나서 처음으로 하는 것을 생각 해 보세요. - 네, 시간을 확인합니다.

우리는 날짜와 시간 데이터를 정기적으로 마주하므로, 왜 우리의 작업에 이를 적용하는 법을 배우지 않는거죠?

SQL은 다양한 날짜, 시간 타입을 제공합니다.

이제 이것들을 봅시다!


Date & Time types - 날짜와 시간 타입


서로 다른 SQL 용어들 속에서, 날짜와 시간 타입은 다를 겁니다.

하지만 여기에 가장 공통적인 것들에 대해 말할 겁니다. :

DATE, TIME, DATETIME, TIMESTAMP, INTERVAL

우리는 이러한 타입들에 대해 MySQL 구현을 따르므로,

다른 SQL 관리 시스템 구문을 위한, 다른 타입과 서로 다른 데이터 길이를 볼 수 있습니다.


DATE 타입은 YYYY-MM-DD 형식에서 연도, 월, 일을 구성하는 날짜를 저장하는 데 사용됩니다.

당신은 '1996-11-06', '2020-12-31' 같은 날짜들을 저장하는 데 사용 할 수 있습니다.

이 타입은 어떠한 날짜도 지원하는데, '1000-01-01'에서 '9999-12-31'까지 지원합니다.


만약 당신이 날짜 없이 시간만 저장하고 싶다면, TIME 타입을 사용할 수 있습니다.

TIME 타입은 hh:mm:ss 형식에서 시간, 분, 초 를 저장합니다.

이를 어떤 날의 시간을 저장하거나, 두 날짜 간의 간격을 표현하는 시간을 저장하는 데 사용 될 수 있습니다.

두 날짜 간격의 시간을 저장할 수 있는 이유는, 해당 타입의 지원 범위가

'-838:59:59' 에서 '838:59:59'로, 매우 넓기 때문입니다.

따라서, MySQL 에서는 '00:00:00', '-455:34:34' 둘 다 TIME 타입으로 적합합니다.

당신은 TIME 값을 '54:45' 처럼 사용 할 수 있는데, 이를 조심하세요 :

이 값은 MySQL에 의해 '00:54:45' 가 아닌, '54:45:00'으로 해석됩니다.


DATETIME 타입은 'YYYY-MM-DD hh:mm:ss' 형식으로 날짜, 시간 둘 다 저장합니다.

해당 타입은 '1000-01-01 00:00:00' 에서 '9999-12-31 23:59:59' 범위 까지 지원합니다.

TIMESTAMP 은 다른 타입으로 MySQL 에서 날짜, 시간 둘 다 저장하는 데 사용되지만, 범위는 더 좁습니다.

TIMESTAMP 타입의 범위는

'1970-01-01 00:00:01' UTC 부터 '2038-01-19 03:14:07' UTC 까지입니다.


다른 흥미로운 시간 저장 데이터 타입은 INTERVAL 입니다.

당신은 두 날짜 간의 간격을 저장하기 위해 이를 사용 할 수 있습니다.

여기 INTERVAL 의 두 가지 클래스가 있습니다 :

INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECOND

첫 번째는 연도, 월 내에서 두 날짜 간의 차이를 저장하는 데 사용됩니다.

반면에 두 번째는 당신이 몇 일, 시간, 분, 초의 다름을 저장할 필요가 있을 때 유용 할 겁니다.

당신은 이 날짜 타입을 볼 수 있는데, 예를 들면 Oracle DBMS가 있습니다.


Current date & time - 최신 날짜 & 시간


꽤 자주, 우리가 데이터를 작업 할 때, 우리의 작업에서 최신 날짜와 시간을 사용 할 필요가 있습니다.

이러한 목적을 위해서, MySQL은 시간, 날짜 둘 다 얻을 수 있게 허용 해 주는 몇몇 기능을 제공합니다.


최근 날짜를 얻기 위해서, 우리는 CURDATE() 혹은 CURRENT_DATE() 기능을 사용 할 수 있습니다.

이러한 두 기능들은 완전히 동일합니다.

최신 날짜를 선택하기 위해서, 매우 간단한 쿼리를 사용 할 수 있습니다 :

SELECT CURDATE();

이와 비슷하게, 최신 시간을 얻기 위해 CURRENT_TIME() 혹은 CURTIME() 기능을 사용 할 수 있습니다.

최신 시간을 선택하기 위해서, 우리는 밑의 기능을 사용 할 수 있습니다 :

SELECT CURTIME();

날짜와 시간 둘 다 선택하기 위해서, CURRENT_TIMESTAMP() 기능을 적용하세요.

SELECT CURRENT_TIMESTAMP();

Date & time difference - 날짜 혹은 시간 차이


만약 두 날짜 사이의 차이를 얻고 싶다면, DATEDIFF(first_date, second_date) 기능을 사용 할 수 있습니다.

MySQL 구문에서는, DATEDIFF() 기능은 두 날짜 사이의 날의 수를 반환합니다.

하지만, 몇몇 다른 SQL DBMS 에서는, 날짜 차이를 얻고자 하는 유닛을 지정 할 수 있습니다. :

year, month, second, 등등..


예를 들어, MySQL 에서의 밑의 쿼리는 결과로 5 를 반환합니다.

SELECT DATEDIFF('2020-05-15 09:34:34', '2020-05-10 15:34:43');

조심하세요! 만약 첫 번째 날짜가 두 번째 날짜보다 작다면 쿼리의 실행 결과로 음수를 얻게 됩니다.


MySQL 에서는, 두 TIME 값의 차이를 얻기 위해 TIMEDIFF(first_name, second_name) 기능을 사용 할 수 있습니다.


Parts of dates - 날짜의 일부


날짜의 일부분을 얻기 위해, EXTRACT(unit FROM date) 기능을 사용할 수 있는데,

주어진 날짜(date) 에서 지정된 조각(unit) 을 추출(EXTRACT) 합니다.


밑의 쿼리는 주어진 날짜에서 "월" 을 추출하고, 결과로서 11을 반환 할 겁니다 :

SELECT EXTRACT(MONTH FROM '2020-11-04');

Adding and subtracting dates - 날짜 더하기 빼기


당신은 날짜를 더하거나 뺄 수도 있는데,

  • DATE_ADD(date, INTERVAL value_of_interval units) : 더하기
  • DATE_SUB(date, INTERVAL value_of_interval units) : 빼기

이렇게 각기, 기능들을 사용 할 수 있습니다.


최신 날짜에서 10 일을 더하는데, DATE_ADD 기능을 사용합니다 :

SELECT DATE_ADD(CURDATE(), INTERVAL 10 DAY);

이 쿼리는 오늘로부터 10 일이 더해진 날짜를 반환 할 겁니다.

예를 들어, 오늘이 2020년 12월 14일이라면, 쿼리는 2020년 12월 24일을 반환합니다.


날짜를 더하는 기능을 가진 ADDATE 라 불리는 함수도 있습니다 :

첫 번째는 현재 날짜를 받으며, 두 번째는 오직 몇 일 인지 만 선언 할 수 있습니다:

SELECT ADDDATE(CURDATE(), 10);

날짜를 빼는 작업은 비슷합니다.

'1996-11-30'에서 2년을 빼 봅시다. :

SELECT DATE_SUB('1996-11-30', INTERVAL 2 YEAR);

쿼리의 결과로, 우리는 '1994-11-30'을 얻게 됩니다.


Time zone support - 시간대 지원


전 세계에는 수많은 time zone이 있으므로, 가끔 날짜와 시간 값의 시간대를 바꿀 필요가 있습니다.


MySQL에서는, 날짜를 다른 시간대로 변경하기 위해서,

CONVERT_TZ(value, from_time_zone, to_time_zone)을 사용 할 수 있습니다.

시간대로 이름이 있는 시간대인 Europe/Helsinki, UTC 와 같은 시간대를 사용하거나,

'-12:59' 에서 '+13:00' 범위를 포함한 오프셋을 사용 할 수도 있습니다.

'SYSTEM' 키워드를 사용하여 시스템의 타임 존을 사용 할 수도 있습니다.


예를 들어, 밑의 쿼리는 주어진 날짜를 바꾸며, 시간을 UTC 에서 US/Eastern 시간대로 변경합니다.

SELECT CONVERT_TZ('2008-05-15 12:00:00', 'UTC', 'US/Eastern');

또한 세션마다 타임 존을 설정 할 수 있는데, 밑의 쿼리를 따라하면 됩니다 :

SET time_zone = timezone;

Conclusion - 결론


이번 주제에서는 일시적인 값을 표현하기 위한 가장 평범한 타입과 유용한 기능들을 배웠는데,

이는 당신이 데이터를 작업하는 동안 적용 할 수 있습니다.

특정한 SQL 관리 시스템을 위한 서로 다른 날짜 & 시간 기능, 날짜 & 시간 타입이 정말 많습니다.

하지만, 이 주제의 대부분의 SQL 예제와 비슷한 기능들을 볼 수 있습니다.


자, 이제 연습 해 봅시다!