1.取一个日期字段的年月:
方法一:select date_format(日期字段,'%Y-%m') as '日期' from 表
方法二:使用left()函数来截取
select left(日期字段,7) as date from tablename (2019-07:占用7个字符)
方法三:使用substring()函数来截取
select substring(日期字段,0,7) as date from tablename
2.datetime和timestamp区别:
- 存储方式不一样,IMESTAMP,它把客户端插入的时间从当前时区转化为UTC(世界标准时间)进行存储。查询时,将其又转化为客户端当前时区进行返回。而对于DATETIME,不做任何改变,基本上是原样输入和输出。
- 占用存储空间不同。timestamp储存占用4个字节,datetime储存占用8个字节
- 可表示的时间范围不同。timestamp可表示范围:1970-01-01 00:00:00~2038-01-09 03:14:07,datetime支持的范围更宽1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
- TIMESTAMP类型在默认情况下,insert、update 数据时,TIMESTAMP列会自动以当前时间(CURRENT_TIMESTAMP)填充/更新。
- 索引速度不同。timestamp更轻量,索引相对datetime更快。
-
timestamp类型字段特殊性:
timestamp类型在自动初始化的时候,会自动设置成当前时间,会自动更新,默认的设置为:
`field` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
如果不想要这样,可以将timestamp设置为默认为空或者设置具体的默认值
3.mysql获取日期的时间函数:
now():在执行开始时值就得到了
sysdate():在函数执行时动态得到值
例子: select now(),sleep(3),now(); 结果:
select SYSDATE(),SLEEP(3),SYSDATE(); 结果:
可以看到,虽然中途 sleep 3 秒,但 now() 函数两次的时间值是相同的; sysdate() 函数两次得到的时间值相差 3 秒.
curdate():获取当前日期 ,current_date() ,current_date 同
curtime():获取当前时间 ,current_time() ,current_time 同
例子: select curdate(); 结果:
select curtime(); 结果:
extract(): 选取日期时间的各个部分:日期、时间、年、季度、月、日、小时、分钟、秒、微秒
例子:select extract(year from now()) as year; 结果:
last_day:返回月份中的最后一天
例子:select last_day('2008-02-03') 结果:
MySQL last_day() 函数非常有用,比如我想得到当前月份中有多少天,可以这样来计算:
例子:select now(), day(last_day(now())) as days; 结果:
4.Mysql日期时间计算函数
在使用mysql的过程中,需要对日期进行计算,比如对某个日期加上几天,几个小时等操作
date_add()函数语法: DATE_ADD(
date
,INTERVAL expr
unit
)
date:起始日期或者起始时间
expr:指定的是一个间隔值,在起始时间中增加或者减少,注意:expr是一个字符串.对于负值间隔,可以以"-"开头
unit:表示的是一个单位,比如,加上的是1天还是一个小时
4.1对某个日期加上n天的操作
select date_add('2018-06-26',INTERVAL '5' day); 结果:
4 .2对某个日期加上n小时,n分钟,n秒的操作
select date_add('2018-06-26 23:59:59',INTERVAL 1 hour); 结果:
select date_add('2018-06-26 23:59:59',INTERVAL 1 minute); 结果:
select date_add('2018-06-26 23:59:59',INTERVAL 1 second); 结果:
4.3对某个日期加上n分钟n秒的操作
select date_add('2018-06-26 23:59:59',INTERVAL '1:1' MINUTE_SECOND); 结果:
4.4对某个日期加上n小时n分钟n秒的操作
select date_add('2018-06-26 23:59:59',INTERVAL '1:1:1' HOUR_SECOND); 结果:
4.5对某个日期加上n小时n分钟的操作
select date_add('2018-06-26 23:59:59',INTERVAL '1:1' HOUR_MINUTE); 结果:
4.6.对某个日期加上几天几小时几分钟几秒钟
select date_add('2018-06-26 23:59:59',INTERVAL '2 2:1:1' DAY_SECOND); 结果:
注:对于日期的减法,尽量用date_sub()函数来实现.
5.Mysql日期时间相减函数
日期、时间相减函数:datediff(date1,date2), timediff(time1,time2)
5.1日期相减:MySQL datediff(date1,date2):两个日期相减 date1 - date2,返回天数。
例子:select datediff('2008-08-08', '2008-08-01') as days; 结果:7
select datediff('2008-08-01', '2008-08-08') as days; 结果:-7
5.2timediff(time1,time2):两个日期相减 time1 - time2,返回 time 差值
例子:select timediff('2008-08-08 08:08:08', '2008-08-08 00:00:00'); 结果:08:08:08
select timediff('08:08:08', '00:00:00'); 结果:08:08:08
6.字符串转换为日期:str_to_date()
函数:str_to_date(str, format)
例子: select str_to_date('08/09/2008', '%m/%d/%Y'); 结果: 2008-08-09 select str_to_date('08/09/08' , '%m/%d/%y'); 2008-08-09 select str_to_date('08.09.2008', '%m.%d.%Y'); 2008-08-09
select str_to_date('08:09:30', '%h:%i:%s'); 08:09:30 select str_to_date('08.09.2008 08:09:30', '%m.%d.%Y %h:%i:%s'); 2008-08-09 08:09:30
7.date_format(),time_format():将日期,时间转换成字符串,是str_to_date()的逆转换