mysql에서 사용 가능한 생일 유형: 1. DATE 유형, 표시할 수 있는 날짜 형식은 "YYYY-MM-DD"이며 저장에 3바이트가 필요합니다. 2. DATETIME 유형, 표시할 수 있는 날짜 형식은 다음과 같습니다. "YYYY- MM-DD HH:MM:SS", 8바이트 저장 필요 3. TIMESTAMP 유형, 표현 가능한 날짜 형식은 "YYYY-MM-DD HH:MM:SS", 4바이트 저장 필요 .
이 튜토리얼의 운영 환경: windows7 시스템, mysql8 버전, Dell G3 컴퓨터.
MySQL에서 생일에 적합한 날짜 및 시간 유형
유형 이름 | 날짜 형식 | 날짜 범위 | 저장소 요구 사항 |
---|---|---|---|
DATE | YYYY- MM-DD | 1000- 01-01 ~ 9999-12-3 | 3바이트 |
DATETIME | YYYY-MM-DD HH:MM:SS | 1000-01-01 00:00:00 ~ 9999-12-31 23: 59:59 | 8바이트 |
TIMESTAMP | YYYY-MM-DD HH:MM:SS | 1980-01-01 00:00:01 UTC ~ 2040-01-19 03:14:07 UTC | 4바이트 |
DATE 유형
DATE 유형은 시간 부분 없이 날짜 값만 필요한 경우에 사용되며 저장에 3바이트가 필요합니다. 날짜 형식은 'YYYY-MM-DD'이며, 여기서 YYYY는 연도, MM은 월, DD는 일을 나타냅니다.
DATE 유형 필드에 값을 할당할 때 DATE의 날짜 형식을 준수하는 한 문자열 유형 또는 숫자 유형 데이터를 사용하여 삽입할 수 있습니다. 아래와 같이
'YYYY-MM-DD' 또는 'YYYYMMDD' 문자 형식으로 표현되는 날짜이며, 값 범위는 '1000-01-01' ~ '9999-12-3'입니다. 예를 들어 '2015-12-31' 또는 '20151231'을 입력하면 데이터베이스에 삽입되는 날짜는 2015-12-31이 됩니다.
날짜를 'YY-MM-DD' 또는 'YYMMDD' 문자열 형식으로 표현합니다. 여기서 YY는 두 자리 연도 값을 나타냅니다. MySQL은 두 자리 연도 값에 대한 규칙을 해석합니다. '00~69' 범위의 연도 값은 '2000~2069'로 변환되고, '70~99' 범위의 연도 값은 으로 변환됩니다. '1970~1999'. 예를 들어, '15-12-31'을 입력하면 데이터베이스에 삽입된 날짜는 2015-12-31이고, '991231'을 입력하면 데이터베이스에 삽입된 날짜는 1999-12-31입니다.
YYMMDD 숫자 형식으로 표현된 날짜는 앞선 것과 유사하게 00~69 범위의 연도 값은 2000~2069, 80~99 범위의 연도 값은 으로 변환됩니다. 1980~1999. 예를 들어 151231을 입력하면 데이터베이스에 삽입된 날짜는 2015-12-31이고, 991231을 입력하면 데이터베이스에 삽입된 날짜는 1999-12-31입니다.
현재 시스템 날짜를 삽입하려면 CURRENT_DATE 또는 NOW()를 사용하세요.
팁: MySQL은 "완화된" 구문을 허용합니다. 구두점은 날짜 부분 사이의 구분 기호로 사용할 수 있습니다. 예를 들어 '98-11-31', '98.11.31', '98/11/31' 및 '98@11@31'은 동일하며 이러한 값은 데이터베이스에 올바르게 삽입됩니다.
DATETIME 유형
DATETIME 유형은 날짜와 시간 정보를 모두 포함해야 하는 값에 사용되며 저장에는 8바이트가 필요합니다. 날짜 형식은 'YYYY-MM-DD HH:MM:SS'이며, 여기서 YYYY는 연도, MM은 월, DD는 일, HH는 시간, MM은 분, SS는 초를 나타냅니다.
DATETIME 유형의 필드에 값을 할당할 때 아래와 같이 DATETIME의 날짜 형식을 준수하는 한 문자열 유형 또는 숫자 유형 데이터를 사용하여 삽입할 수 있습니다.
'YYYY-MM을 사용합니다. -DD HH:MM :SS' 또는 'YYYYMMDDHHMMSS' 문자열 형식으로 표현되는 날짜이며, 값 범위는 '1000-01-01 00:00:00' ~ '9999-12-3 23:59:59'입니다. 예를 들어 '2014-12-31 05:05:05' 또는 '20141231050505'를 입력하면 데이터베이스에 삽입되는 DATETIME 값은 2014-12-31 05:05:05가 됩니다.
'YY-MM-DD HH:MM:SS' 또는 'YYMMDDHHMMSS' 문자열 형식으로 표현되는 날짜입니다. 여기서 YY는 두 자리 연도 값을 나타냅니다. 이전과 동일하게 '00~79' 범위의 연도 값은 '2000~2079'로 변환되고, '80~99' 범위의 연도 값은 '1980~1999'로 변환됩니다. 예를 들어, '14-12-31 05:05:05'를 입력하면 데이터베이스에 삽입된 DATETIME은 2014-12-31 05:05:05이고, 141231050505를 입력하면 데이터베이스에 삽입된 DATETIME은 2014입니다. -12-31 05:05:05 .
YYYYMMDDHHMMSS 또는 YYMMDDHHMMSS 숫자 형식으로 표현된 날짜 및 시간입니다. 예를 들어, 20141231050505를 입력하면 데이터베이스에 삽입된 DATETIME은 2014-12-31 05:05:05이고, 140505050505를 입력하면 데이터베이스에 삽입된 DATETIME은 2014-12-31 05:05:05입니다.
팁: MySQL은 "완화된" 구문을 허용합니다. 구두점은 날짜 부분이나 시간 부분 사이의 구분 기호로 사용할 수 있습니다. 예를 들어 '98-12-31 11:30:45', '98.12.31 11+30+35', '98/12/31 11*30*45' 및 '98@12@31 11^30^ 45'는 동일하며 이 값은 데이터베이스에 올바르게 삽입될 수 있습니다.
TIMESTAMP 유형
TIMESTAMP는 DATETIME과 동일한 표시 형식을 가지며 표시 너비는 19자로 고정되고 날짜 형식은 YYYY-MM-DD HH:MM:SS이며 저장에 4바이트가 필요합니다. 다만, TIMESTAMP 컬럼의 값 범위는 DATETIME의 값 범위인 '1970-01-01 00:00:01'UTC~'2038-01-19 03:14:07'UTC보다 작다. 데이터를 삽입할 때 유효한 값 범위 내에 있는지 확인하십시오.
팁: 협정 세계시(영어: 협정 세계시, 프랑스어: Temps Universel Coordonna)는 세계 통일시(Universal Unified Time), 세계 표준시(Universal Standard Time), 국제 협정시(International Coordinated Time)라고도 합니다. 영어(CUT)와 프랑스어(TUC) 약어가 다르며 절충안으로 약어는 UTC입니다.
TIMESTAMP 및 DATETIME은 다양한 저장 바이트 및 지원 범위 외에도 가장 큰 차이점은 다음과 같습니다.
DATETIME 날짜 데이터를 저장할 때 실제 입력 형식으로 저장됩니다. 즉, 입력되는 모든 내용이 저장됩니다.
TIMESTAMP 값의 저장은 UTC(Universal Coordinated Time) 형식으로 저장되며, 검색 시 현재 시간대로 다시 변환됩니다. 즉, 쿼리 시 현재 시간대에 따라 표시되는 시간 값이 다릅니다.
팁: DATETIME 또는 TIMESTAMP 객체에 DATE 값을 할당하면 결과 값의 시간 부분이 '00:00:00'으로 설정되므로 DATE 값에는 시간 정보가 포함되지 않습니다. DATE 객체에 DATETIME 또는 TIMESTAMP 값이 할당되면 결과 값의 시간 부분이 제거되므로 DATE 값에는 시간 정보가 포함되지 않습니다.
시간 및 날짜 함수
시스템 시간 함수 now(), current_timestamp, sysdate()
이 세 가지 함수는 시스템 시간을 반환하고 차이점을 확인하며 동시에 time 이 세 가지 함수에 접근하여 얻은 결과는 동일하지만, 몇 초간 기다린 후에는 결과가 다릅니다.
위 그림을 보면 sysdate()가 반환한 시간이 now()와 다르며 current_timestamp가 2초 느린 것을 알 수 있습니다. 그 이유는 다음과 같습니다.
current_timestamp는 now의 동의어이며, 둘은 같습니다.
sysdate() 함수는 현재 함수가 실행되는 시간을 반환하고, now()는 sql 문이 실행되는 시간을 반환합니다.
시간 덧셈 및 뺄셈 함수
① date_add 및 date_sub
date_add(date , 간격 expr 단위) 및 date_sub(date, 간격 expr 단위)는 각각 증가 및 감소를 나타냅니다.
select date_add('2017-12-18 22:51:00', interval 1 second), date_add('2017-12-18 22:51:00', interval 1 minute), date_add('2017-12-18 22:51:00', interval 1 hour), date_add('2017-12-18 22:51:00', interval 1 day), date_add('2017-12-18 22:51:00', interval 1 month), date_add('2017-12-18 22:51:00', interval 1 year);
윤달이 발생할 때 date_add를 처리하는 방법은 무엇입니까? MySQL은 윤달인 경우 2월 29일을 반환하고, 윤달이 아닌 경우 2월 28일을 반환합니다.
select date_add('2016-02-29 22:51:00', interval -1 year), date_add('2016-02-29 22:51:00', interval 4 year);
2015-02-28 22:51:002020-02-29 22:51:00
② datediff 및 timediff
datediff(date1, date2): 두 날짜 date1 - date2를 빼고 일 수를 반환합니다. select datediff('2016-02-29 22:51:00','2016-03-29 22:51:00');
timediff(time1, time2): 두 날짜 time1 - time2를 빼고, 시차(형식: 838:59:59). select timediff('2016-02-29 22:51:00','2016-01-29 22:51:00');
참고: timediff(time1,time2) 함수의 두 가지 매개 변수 유형은 다음과 같아야 합니다. 동일하다.
3 타임스탬프 증가, 감소, 변환 기능
timestamp(date)
-- 날짜를 timestamp로timestamp(date)
-- date to timestamp
timestamp(date, time)
-- date + time
timestampadd(unit,interval,datetime_expr)
-- 类似date_add,对时间按单位进行增加,减少
select timestampadd(second, 60, '2017-12-18 00:00:00'); select timestampadd(minute, 60, '2017-12-18 00:00:00'); select timestampadd(hour, 60, '2017-12-18 00:00:00');
timestampdiff(unit,datetime_expr1,datetime_expr2)
timestamp(날짜, 시간)
-- 날짜 + time
timestampadd(unit,interval,datetime_expr)
-- date_add와 유사하며, 단위별로 시간을 늘리거나 줄입니다
select timestampdiff(second, '2017-12-18 00:00:00','2017-12-18 12:00:00'); select timestampdiff(hour, '2017-11-18 00:00:00','2017-12-18 12:00:00'); select timestampdiff(day, '2017-10-17 00:00:00','2017-11-18 23:00:00');
timestampdiff(unit,datetime_expr1, datetime_expr2 )
-- 두 시간의 차이를 계산하여 초, 분, 시간, 일, 월, 년, 주를 계산할 수 있습니다
select date_format(now(),'%Y%m%d'), date_format(now(),'%Y-%m-%d'), date_format(now(),'%Y/%m/%d'), date_format(now(),'%m/%d/%Y');4 date_format 함수
date_format 함수는 주로 날짜 형식을 지정하는 데 사용됩니다
select * from employees where date_format(birth_date,'%Y-%m-%d') = '1961-08-03';참고: 데이터를 쿼리할 때 날짜 필드에 이 기능을 사용하면 최적화 프로그램이 해당 필드의 인덱스를 사용하지 않고 인덱스를 통해 데이터를 쿼리할 수도 없으므로 쿼리 효율성이 매우 낮습니다. 다음 쿼리 문에서birth_date 필드에 인덱스가 있는 경우 date_format 함수 사용으로 인해 인덱스가 유효하지 않습니다. 🎜
-- 上一年,当年,下一年生日与当前时间差最小的年就是用户最近的生日 select emp_no,first_name,last_name,birth_date,today,if(last_diff<=cur_diff and last_diff<=next_diff, last,if(cur_diff from ( -- 计算当前时间与上一年,当年,下一年生日的时间差 select emp_no,first_name,last_name,birth_date,datediff(today,last) as last_diff,abs(datediff(today,cur)) as cur_diff,abs(datediff(today,next)) as next_diff, last,cur,next,today from ( -- 用户最近的生日可能分布在前一年,当年,下一年。根据年度差year_diff计算上一年,当年,下一年用户的生日 select emp_no,first_name,last_name,birth_date, DATE_ADD(birth_date,INTERVAL year_diff year) as cur, DATE_ADD(birth_date,INTERVAL year_diff+1 year) as next, DATE_ADD(birth_date,INTERVAL year_diff-1 year) as last, today from ( -- 获取当前事前与出生日期的年度差 year_diff select emp_no,first_name,last_name,birth_date,(year(NOW())-year(birth_date)) as year_diff, NOW() as today from employees ) a ) b ) c🎜🎜🎜날짜의 고전적인 프로그래밍 문제🎜🎜🎜🎜사용자의 최신 생일 계산(과거 및 미래 포함) 것) 생년월일과 현재 날짜를 기준으로 )🎜rrreee🎜【관련 추천:🎜mysql 비디오 튜토리얼🎜】🎜
위 내용은 mysql에서는 생일에 어떤 유형이 사용됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!