转载自 http://blog.csdn.net/yuqiongran/article/details/52919401
一. 时区转换
CONVERT_TZ(dt ,from_tz ,to_tz )
eg
SELECT now(), CONVERT_TZ (now(), '+8:00', '-8:00') as los;
函数使用说明: CONVERT_TZ() 将时间日期值 dt 从 from_tz 给出的时区转到 to_tz 给出的时区,然后返回结果值。关于可能指定的时区的详细论述,若自变量无效,则这个函数会返回 NULL
二. 时间转换
查询当前时间
now()
查询3天后的时间
timestampadd(day, 3, now())
时间格式转换
date_format(now(),'%Y/%m/%d')
把时间转换成时间戳
UNIX_TIMESTAMP('2016-12-04 16:30:28') UNIX_TIMESTAMP(now())
时间戳转换成时间
FROM_UNIXTIME('1480581161',"%Y/%m/%d")
三.format 格式化标识
%W
星期名字(Sunday……Saturday)
%D
有英语前缀的月份的日期(1st, 2nd, 3rd, 等等。)
%Y
年,数字, 4 位
%y
年, 数字, 2 位
%a
缩写的星期名字(Sun……Sat)
%d
月份中的天数, 数字(00……31)
%e
月份中的天数, 数字(0……31)
%m
月, 数字(01……12)
%c
月, 数字(1……12)
%b
缩写的月份名字(Jan……Dec)
%j
一年中的天数(001……366)
%H
小时(00……23) %k 小时(0……23)
%h
小时(01……12) %I 小时(01……12)
%l
小时(1……12) %i 分钟, 数字(00……59)
%r
时间,12 小时(hh:mm:ss [AP]M)
%T
时间,24 小时(hh:mm:ss)
%S
秒(00……59)
%s
秒(00……59)
%p
AM或PM
%w
一个星期中的天数(0=Sunday ……6=Saturday )
%U
星期(0……52), 这里星期天是星期的第一天
%u
星期(0……52), 这里星期一是星期的第一天
四. 时间段查询
表tablename,添加时间是insert_time字段,该字段为int(5)类型的,现需要查询今天添加的文章总数并且按照时间从大到小排序,则查询语句如下:
select * from tablename where date_format(from_UNIXTIME(insert_time),'%Y-%m-%d') = date_format(now(),'%Y-%m-%d');
或者:
select * from tablename where to_days(date_format(from_UNIXTIME(insert_time),'%Y-%m-%d')) = to_days(now());
表的insert_time字段的存储类型是DATETIME类型或者TIMESTAMP类型,则查询语句也可按如下写法:
查询今天的信息记录:
select * from tablename where to_days(insert_time) = to_days(now());
查询昨天的信息记录:
select * from tablename where to_days(now()) - to_days(insert_time) <= 1;
查询近7天的信息记录:
select * from tablename where date_sub(curdate(), INTERVAL 7 DAY) <= date(insert_time);
查询近30天的信息记录:
select * from tablename where date_sub(curdate(), INTERVAL 30 DAY) <= date(insert_time);
查询本月的信息记录:
select * from tablename where date_format(insert_time, '%Y%m') = date_format(curdate() , '%Y%m');
查询上一月的信息记录:
select * from tablename where period_diff(date_format(now() , '%Y%m') , date_format(insert_time, '%Y%m')) =1;