?
工作中对日期的处理是经常遇到的,需求可能多种多样,因此重点介绍。
?
1.获取当前日期
?
?
select NOW()
-- 结果:2015-10-28 22:41:11
select NOW(),SLEEP(3),NOW()
-- 结果 2015-10-28 22:43:34 ?0 ?2015-10-28 22:43:34
?
SELECT SYSDATE(),SLEEP(3),SYSDATE()
-- 结果 2015-10-28 22:46:48 ?0 ?2015-10-28 22:46:52
-- NOW()是sql执行前就得到,而SYSDATE()是该函数执行时才得到,一般来说NOW()已经足够,所以更常用
?
2.日期格式化
?
DATE_FORMAT(date,format) ?注: 该函数返回的是字符串类型
根据format字符串格式化date值
(在format字符串中可用标志符:
%M 月名字(January……December)?
%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), 这里星期一是星期的第一天?
%% 字符% )
?
-- 根据上面的参数,我们可以得到各种各样的日期格式,比mssql的convert函数强大太多了,以下是常用的标准日期格式
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d') -- 2015-10-28
SELECT DATE_FORMAT(NOW(),'%y-%m-%d') -- 15-10-28
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %H:%m:%s') -- 2015-10-28 22:10:56
3.日期截取
?
?
-- 获取日期当天是星期几(1=星期天,2=星期一....7=星期六)
SELECT DAYOFWEEK(now())?
-- 获取日期当天是几号?
SELECT DAYOFMONTH('2015-10-28') ?-- 结果28
-- 获取日期当天是一年中的第几天
SELECT DAYOFYEAR('2015-10-28') ?-- 结果 301
?
-- 获取日期的年份
SELECT YEAR('2015-10-28') -- 结果 2015
-- 获取日期第几季度
SELECT QUARTER('2015-10-28') ?-- 结果 4
-- 获取日期的月份
SELECT MONTH('2015-10-28') -- 结果 10
-- 获取日期是第几周
SELECT WEEK('2015-10-28') ?-- 结果43 (默认星期天为一周的第一天)
SELECT WEEK('2015-10-28',0) ?-- 结果43 (星期天为一周的第一天)
SELECT WEEK('2015-10-28',1) ?-- 结果44 (星期一为一周的第一天)
-- 获取日期的小时
SELECT HOUR('2015-10-28 23:11:56') -- 结果 23
-- 获取日期的分钟
SELECT MINUTE('2015-10-28 23:11:56') -- 结果 11
-- 获取日期的秒钟
SELECT SECOND('2015-10-28 23:11:56') -- 结果 56
-- 获取日期部分
SELECT DATE('2015-10-28 23:11:56') -- 结果'2015-10-28'
-- 获取时间部分
SELECT TIME('2015-10-28 23:11:56') -- 结果'23:11:56'
?
4.日期运算
?
DATE_ADD(date,INTERVAL expr type)?
?
[type值 含义 期望的expr格式]:
SECOND 秒 SECONDS?
MINUTE 分钟 MINUTES?
HOUR 时间 HOURS?
DAY 天 DAYS?
MONTH 月 MONTHS?
YEAR 年 YEARS?
MINUTE_SECOND 分钟和秒 "MINUTES:SECONDS"?
HOUR_MINUTE 小时和分钟 "HOURS:MINUTES"?
DAY_HOUR 天和小时 "DAYS HOURS"?
YEAR_MONTH 年和月 "YEARS-MONTHS"?
HOUR_SECOND 小时, 分钟, "HOURS:MINUTES:SECONDS"?
DAY_MINUTE 天, 小时, 分钟 "DAYS HOURS:MINUTES"?
DAY_SECOND 天, 小时, 分钟, 秒 "DAYS HOURS:MINUTES:SECONDS"
expr中允许任何标点做分隔符,如果所有是DATE值时结果是一个DATE值,否则结果是一个DATETIME值)
如果type关键词不完整,则MySQL从右端取值,DAY_SECOND因为缺少小时分钟等于MINUTE_SECOND)
如果增加MONTH、YEAR_MONTH或YEAR,天数大于结果月份的最大天数则使用最大天数)?
?
?
-- 说明 正号为加法,负号为减法
-- 增加4天
SELECT DATE_ADD('2015-10-28 23:11:56', INTERVAL 4 DAY ) --2015-11-01 23:11:56
-- 减少3天
SELECT DATE_ADD('2015-10-28 23:11:56', INTERVAL -3 DAY ) -- 2015-10-25 23:11:56
-- 增加1年
SELECT DATE_ADD('2015-10-28 23:11:56', INTERVAL 1 YEAR ) --?
2016-10-28 23:11:56
-- 增加1天3小时
SELECT DATE_ADD('2015-10-28 23:11:56', INTERVAL '1 3' DAY_HOUR ) -- 2015-10-27 20:11:56
-- 减1天1小时1分1秒
SELECT DATE_ADD