MySQL日期时间
数据类型
| 类型 | 大小 | 范围 | 格式 | 用途 |
|---|---|---|---|---|
| DATE | 3字节 | '1000-01-01' ~ '9999-12-31' | YYYY-MM-DD | 日期值 |
| TIME | 3字节 | '-838:59:59' ~ '838:59:59' | HH:MM:SS | 时间值 |
| YEAR | 1字节 | '1901' ~ '2155' | YYYY | 年份值 |
| DATETIME | 8字节 | '1000-01-01 00:00:00' ~ '9999-12-31 23:59:59' | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
| TIMESTAMP | 4字节 | '1970-01-01 00:00:01' ~ '2038-01-19 03:14:07' | YYYY-MM-DD HH:MM:SS | 混合日期和时间值,时间戳 |
数据库中的日期时间类型,保存显示的时候为YYYY-MM-DD HH:MM:SS形式的ISO 8601标准,向日期时间类型保存数据时,也要使用该格式。
格式化
| 格式 | 描述 | 格式 | 描述 | 格式 | 描述 |
|---|---|---|---|---|---|
| %a | 缩写星期名 | %b | 缩写月名 | %c | 月,数值 |
| %D | 带英文前缀的月中的天,3rd,25th | %d | 月的天,00~31 | %e | 月的天,不补充0 |
| %f | 微秒 | %H | 小时,00-23,24小时制 | %h | 12小时制,00-12,但不带AM或PM |
| %l | 12小时制,0-12,前面不补充0 | %i | 分钟,00-59 | %j | 年的天,000-366 |
| %k | 小时,0-23 | %l | 小时,1-12 | %M | 英文月名 |
| %m | 月,数值1-12 | %p | AM或PM | %r | 12小时,(hh:mm:ss AM 或 PM) |
| %S | 秒(00-59) | %s | 秒(00-59) | %T | 时间, 24-小时 (hh:mm:ss) |
| %U | 第几周 (00-53) 星期日是一周的第一天 | %u | 周 (00-53) 星期一是一周的第一天 | %W | 星期名,英文名 |
| %w | 周的天 (0=星期日, 6=星期六) | %Y | 年,4 位 | %y | 年,2 位 |
使用DATE_FORMAT或TIME_FORMAT函数进行格式化操作,如:
select DATE_FORMAT(time, '%Y年%m月%d日') from table_name;
select TIME_FORMAT(time, '%r') from table_name;
两者的区别是:TIME_FORMAT只支持时分秒的格式化,DATE_FORMAT都支持。
自动更新
设置DEFAULT CURRENT_TIMESTAMP在插入记录时,自动填入当前时间
设置DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP在插入与更新时都进行更新
常用函数
当前时间、日期
select current_date, current_timestamp, now();
current_date 当前日期,'YYYY-MM-DD'
current_timestamp 当前时间,'YYYY-MM-DD HH:mm:ss'
now() 同上
截取部分时间值
| 函数 | 说明 | 函数 | 说明 | 函数 | 说明 |
|---|---|---|---|---|---|
| YEAR | 年(范围从1000 到 9999) | MONTH | 月(范围从1到12) | DAY | 日(范围从1开始) |
| HOUR | 时(范围从0到23) | MINUTE | 分(范围从0到59) | SECOND | 秒(范围从0到59) |
| TIME | 获取时间 | WEEK | 一年中的第几周,从1开始计数 | QUARTER | 一年中的季度,从1开始计数 |
| CURRENT_DATE | 当前日期 | CURRENT_TIME | 当前时间 | NOW | 当前时间 |
| DAYOFYEAR | 一年中的第几天(从1开始) | DAYOFMONTH | 月份中天数(从1开始) | DAYOFWEEK | 星期天(1)到星期六(7) |
| WEEKDAY | 星期一(0)到星期天(6) | TO_DAYS | 从元年到现在的天数(忽略时间部分) | FROM_DAYS | 根据天数得到日期(忽略时间部分) |
| TIME_TO_SEC | 时间转为秒数(忽略日期部分) | SEC_TO_TIME | 根据秒数转为时间(忽略日期部分) | UNIX_TIMESTAMP | 根据日期返回秒数(包括日期与时间) |
| FROM_UNIXTIME | 根据秒数返回日期与时间(包括日期与时间) | DATEDIFF | 两个日期相差的天数(忽略时间部分,前面日期减后面日期) | TIMEDIFF | 计算两个时间的间隔(忽略日期部分) |
| TIMESTAMPDIFF | 根据指定单位计算两个日期时间的间隔(包括日期与时间) | LAST_DAY | 该月的最后一天 |
时间计算
| 函数 | 说明 | 函数 | 说明 |
|---|---|---|---|
| ADDTIME | 增加时间,只对时间有效 | TIMESTAMP | 添加时间,只对时间有效 |
| DATE_ADD | 根据单位添加时间 | DATE_SUB | 根据单位减少时间 |
| LAST_DATE | 指定月中最后一天 |

浙公网安备 33010602011771号