如何获取当前时间
Select curtime();
Select curdate()
select current_date();
SELECT CURRENT_TIMESTAMP();
SELECT NOW();
sELECT LOCALTIME();
sELECT LOCALTIMESTAMP();
Select sysdate();
获取当前时间戳
select unix_timestamp();
- Msyql时间类型
MySQL中常用的几种时间类型有:date、datetime、time、year、timestamp
数据类型 占用字节 最小值 最大值 零值表示
date 4 1000-01-01 9999-12-31 0000-00-00
datetime 8 1000-01-01 00:00:00 9999-12-31 23:59:59 0000-00-00 00:00:00
timestamp 4 19700101080001 2038年的某个时刻 0000000000000000
time 3 -838:59:59 838:59:59 00:00:00
year 1 1901 2155 0000
注意:timestamp不是真正意义上的时间戳
总结:date :只有日期没有时间
Datetime 有日期,有时间
Timestamp 有日期,有时间精确到秒
Time 有时间没有日期,
Year 只有年
2. 日期时间类型格式化
-
- Date_format函数
- 简介
DATE_FORMAT(date,format);
Date:是要格式化的日期有效值
Formate: 是由预定义的说明符组成的格式字符串,每个说明符前面都有一个百分比字符(%)
%a | 三个字符缩写的工作日名称,例如:Mon, Tue, Wed,等 |
%b | 三个字符缩写的月份名称,例如:Jan,Feb,Mar等 |
%c | 以数字表示的月份值,例如:1, 2, 3…12 |
%D | 英文后缀如:0th, 1st, 2nd等的一个月之中的第几天 |
%d | 如果是1个数字(小于10),那么一个月之中的第几天表示为加前导加0, 如:00, 01,02, …31 |
%e | 没有前导零的月份的日子,例如:1,2,… 31 |
%f | 微秒,范围在000000..999999 |
%H | 24小时格式的小时,前导加0,例如:00,01..23 |
%h | 小时,12小时格式,带前导零,例如:01,02 … 12 |
%I | 与%h相同 |
%i | 分数为零,例如:00,01,… 59 |
%j | 一年中的的第几天,前导为0,例如,001,002,… 366 |
%k | 24小时格式的小时,无前导零,例如:0,1,2 … 23 |
%l | 12小时格式的小时,无前导零,例如:0,1,2 … 12 |
%M | 月份全名称,例如:January, February,…December |
%m | 具有前导零的月份名称,例如:00,01,02,… 12 |
%p | AM或PM,取决于其他时间说明符 |
%r | 表示时间,12小时格式hh:mm:ss AM或PM |
%S | 表示秒,前导零,如:00,01,… 59 |
%s | 与%S相同 |
%T | 表示时间,24小时格式hh:mm:ss |
%U | 周的第一天是星期日,例如:00,01,02 … 53时,前导零的周数 |
%u | 周的第一天是星期一,例如:00,01,02 … 53时,前导零的周数 |
%V | 与%U相同,它与%X一起使用 |
%v | 与%u相同,它与%x一起使用 |
%W | 工作日的全称,例如:Sunday, Monday,…, Saturday |
%w | 工作日,以数字来表示(0 = 星期日,1 = 星期一等) |
%X | 周的四位数表示年份,第一天是星期日; 经常与%V一起使用 |
%x | 周的四位数表示年份,第一天是星期日; 经常与%v一起使用 |
%Y | 表示年份,四位数,例如2000,2001,…等。 |
%y | 表示年份,两位数,例如00,01,…等。 |
%% | 将百分比(%)字符添加到输出 |
常用函数
1函数date_format(date,format) 把时间格式化,可以理解为把时间转化成字符串
2 str_to_date(str,format) 把字符串转化成时间类型 字符串非法会返回null
3mysql时间的加减
Date_add(date, interval 1 ‘单位’) 加法
date_sub(date,interval expr type) 减去
date_sub('2019-07-27', interval 30 day)表示往前推30天
4 时间戳方式计算时间差:
mysql>select unix_timestamp(str_to_date('20221212 00:00:06','%Y%m%d %H:%i:%s'))-unix_timestamp(str_to_date('20221212 00:00:01','%Y%m%d %H:%i:%s')) datestamp; +-----------+ | datestamp | +-----------+ | 5 | +-----------+ 1 row in set (0.00 sec)
5 datediff(date1,date2) 返回的时天数 ,time diff(time1,time2)
6总结 createtime是时间字段
每日
时间戳使用 FROM_UNIXTIME(date,'%Y-%m-%d')
日期使用 DATE_FORMAT(date, '%Y-%m-%d')
每月
时间戳使用 FROM_UNIXTIME(date,'%Y-%m')
日期使用 DATE_FORMAT(date, '%Y-%m')
每季
时间戳使用 SELECT CONCAT(FROM_UNIXTIME(date, '%Y-'),QUARTER(FROM_UNIXTIME(createtime,'%Y-%m-%d'))) AS starts, COUNT(*) FROM ceshi GROUP BY starts;
日期使用 SELECT CONCAT(DATE_FORMAT(createtime, '%Y-'),QUARTER(createtime)) AS starts, COUNT(*) FROM ceshi GROUP BY starts;
每年
时间戳使用 FROM_UNIXTIME(createtime,'%Y')
日期使用 DATE_FORMAT(createtime, '%Y')
时间戳和时间的转换函数
From_ UNIXtime() 时间戳>时间
Unix_timestamp() 时间转时间戳
7不同类型的时间加减
period_add(P,N), period_diff(P1,P2)