1、MySQL中常用的几种时间类型有:date、datetime、time、year、timestamp
数据类型 | 占用字节 | 最小值 | 最大值 | 零值表示 | 备注 |
---|---|---|---|---|---|
date | 4 | 1000-01-01 | 9999-12-31 | 0000-00-00 | 日期,就是datetime中的date部分 |
datetime | 8 | 1000-01-01 00:00:00 | 9999-12-31 23:59:59 | 0000-00-00 00:00: 00 | 时间日期型,格式是YYYY-mm-dd HH:ii:ss,表示的范围是从1000到9999。但是有零值:0000-00-00 00:00:00 |
timestamp | 4 | 19700101080001 | 2038年的某个时刻 | 0000000000000000 | 时间戳,并不是常规意义时间戳(如:14253685),范围是’1970-01-01 00:00:00’到2037年。格式为YYYY-mm-dd HH:ii:ss,格式与datetime完全一致; |
time | 3 | -838:59:59 | 838:59:59 | 00:00:00 | 时间(段),指定的某个区间之间,从-时间到+时间(有负时间表示) |
year | 1 | 1901 | 2155 | 0000 | yy和yyyy,yyyy的范围是1901-2155,yy的范围是1970-2069。两位year(00-69表示2000-2069,70-99表示1970~1999)。当应用只需要记录年份时,year比date更省空间 |
2、日期格式化
(1)date_format
select date_format('2022-09-22 00:00:00', '%Y-%m-%d %H:%i:%s');把当天0点改为当天最后时间点:select date_format('2022-09-22 00:00:00', '%Y-%m-%d 23:59:59');
(2)str_to_date
select str_to_date('2022-09-22 00:00:00', '%Y-%m-%d %H:%i:%s');
3、字母代表含义:
%Y:年,4 位(eg:2021)
%y:年,2 位(eg:21)
%M:月份英文(eg:October)
%b:缩写月名(eg:Oct)
%m:月,数值(01-12)
%c:月,1~2位数值(1-12)
%D:天,带有英文(eg:13th)
%d:天,2位数值(01-31)[有的地方说是00开始,难道每月有0号吗]
%e:天,1~2位数值(1-31)
%j:年的天 (001-366)
%H:小时,2位数值(00-23)
%h:小时,12小时制,2位数值(01-12)(20点变08)
%I(i的大写):小时,12小时制,2位数值(01-12)(20点变08)
%l(L的小写):小时,12小时制,1~2位数值(1-12)(20点变8)
%k:小时 (0-23)
%i:分钟,2位数值(00-59)
%S:秒,2位数值(00-59)
%s:秒,2位数值(00-59)
%f:微秒 (字段类型是datetime(6)这样才会有值)
%p:AM 或 PM
%r:时间,12-小时(hh:mm:ss AM 或 PM)(eg:05:37:23 PM)
%T:时间,24-小时 (hh:mm:ss)(eg:17:37:49)
%U:周 (00-53) 星期日是一周的第一天
%u:周 (00-53) 星期一是一周的第一天
%V:周 (01-53) 星期日是一周的第一天,与 %X 使用
%v:周 (01-53) 星期一是一周的第一天,与 %x 使用
%w:周的天 (0=星期日, 6=星期六)
%W:星期名 (eg:Friday)
%a:缩写星期名(eg:Fri)
%X:年,其中的星期日是周的第一天,4 位,与 %V 使用
%x:年,其中的星期一是周的第一天,4 位,与 %v 使用