MYSQL学习笔记三:日期和时间函数,mysql学习笔记
MYSQL学习笔记三:日期和时间函数
1. 获取当前日期的函数和获取当前时间的函数
/*获取当前日期的函数和获取当前时间的函数,将日期以'YYYY-MM-DD'或者’YYYYMMDD’格式返回
*/
#CURDATE()与CURRENT_DATE()作用相同,返回相同的系统当前日期
#CURDATE()+0则将当前日期值转换成数值类型
SELECT CURDATE(), CURRENT_DATE(), CURDATE()+0;
/* CURTIME()和CURRENT_TIME()作用相同,将当前时间以'HH:MM:SS'或者’HHMMSS’格式返回
*/
#CURRENT_TIME()+0表示以数值形式HHMMSS格式显示
SELECT CURTIME(), CURRENT_TIME(), CURRENT_TIME()+0;
2. 获取当前日期与时间的函数
#从结果可以看出,下面四个函数的功能相同
SELECT CURRENT_TIMESTAMP(),LOCALTIME(),NOW(),SYSDATE();
3. 获取月份的函数
#MONTH(date):函数返回date对应的月份,范围从1~12
#MONTHNAME(date):函数返回日期date对应月份的英文全名,如March
SELECT MONTH(NOW()), MONTHNAME(NOW());
4. 获取星期的函数
#DAYNAME(d):返回d对应的工作日的英文名称,如Sunday, Monday等
#DAYOFWEEK(d):返回d对应的一周中的索引(位置)。1表示周日,2表示周一,...,7表示周六
#WEEKDAY(d):返回d对应的工作日的索引。0表示周一,1表示周二,...6表示周日
SELECT DAYNAME(NOW()), DAYOFWEEK(NOW()), WEEKDAY(NOW());
5. 获取星期数的函数
#WEEK(d):计算日期d是一年中的第几周。
#WEEK(d,mode):指定mode是否起始于周日或者周一,若mode被省略,则使用default_week_format系统自变量的值0
#WEEK函数中Mode参数取值
|
Mode |
一周的第一天 |
范围 |
Week 1为第一周 |
|
0 |
周日 |
0~53 |
本年度中有一个周日 |
|
1 |
周一 |
0~53 |
本年度中有3天以上 |
|
2 |
周日 |
1~53 |
本年度中有一个周日 |
|
3 |
周一 |
1~53 |
本年度中有3天以上 |
|
4 |
周日 |
0~53 |
本年度中有3天以上 |
|
5 |
周一 |
0~53 |
本年度中有一个周一 |
|
6 |
周日 |
1~53 |
本年度中有3天以上 |
|
7 |
周一 |
1~53 |
本年度中有一个周一 |
#WEEKOFYEAR(d):计算某天d位于一年中的第几周,范围是1~53。相当于WEEK(d,3)
SELECT WEEK(NOW()), WEEK(NOW(),0), WEEK(NOW(),1), WEEKOFYEAR(NOW()), WEEK(NOW(),3);
6. 获取天数函数
#DAYOFYEAR(d):返回d是一年中的第几天,范围从1~366
#DAYOFMONTH(d):返回d是一个月中的第几天,范围是1~31
SELECT DAYOFYEAR(NOW()), DAYOFMONTH(NOW());
7. 获取年份、季度、月、小时、分钟和秒钟的函数
#YEAR(date):返回date对应的年份,范围是1970~2069
#QUARTER(date):返回date对应的一年中的季度,范围1~4
#MONTH(date):函数返回date对应的月份,范围从1~12
#MONTHNAME(date):函数返回日期date对应月份的英文全名,如March
#HOUR(time):返回time对应的小时数,范围是0~24
#MINUTE(time):返回time对应的分钟数,范围是从0~59
#SECOND(time):返回time对应的秒数,范围是0~59
SELECT
YEAR(CURDATE()) as yr,
QUARTER(CURDATE()) as qt,
MONTH(CURDATE()) as mon,
MONTHNAME(CURDATE()) as mon_name,
HOUR(CURTIME()) as hrs,
MINUTE(CURTIME()) as min,
SECOND(CURTIME()) as snd;
8. 获取日期的指定值函数EXTRACT(type FROM date)
#用于从date中按照type提取一部分值
SELECT
EXTRACT(YEAR FROM NOW()) as year,
EXTRACT(QUARTER FROM NOW()) as quarter,
EXTRACT(MONTH FROM NOW()) as month,
EXTRACT(DAY FROM NOW()) as day,
EXTRACT(HOUR FROM NOW()) as hour,
EXTRACT(MINUTE FROM NOW()) as minute,
EXTRACT(SECOND FROM NOW()) as second,
EXTRACT(YEAR_MONTH FROM NOW()) as year_mon
;
9. 时间和秒钟转换函数TIME_TO_SEC(time)
#转换公式:<小时*3600+分钟*60+秒>
#TIME_TO_SEC(time):返回已转化成秒的time参数
#SEC_TO_TIME(seconds):返回被转化为小时、分钟和秒数的seconds参数值
SELECT
CURTIME() as time,
TIME_TO_SEC(CURTIME()) as second,
SEC_TO_TIME(TIME_TO_SEC(CURTIME())) as time;
.....待续
本文尚未完成,同于时间关系,后面会续上,谢谢大家关照!
如果你们有更好的建议,请发邮件到我私人邮箱: david.louis.tian@outllook.com
版权@: 本文系本人原创,转载请标明出处,谢谢!
取得当前时间用 now() 就行。
在数据库中格式化时间 用DATE_FORMA T(date, format) .
根据格式串format 格式化日期或日期和时间值date,返回结果串。
可用DATE_FORMAT( ) 来格式化DATE 或DATETIME 值,以便得到所希望的格式。根据format字符串格式化date值:
%S, %s 两位数字形式的秒( 00,01, . . ., 59)
%i 两位数字形式的分( 00,01, . . ., 59)
%H 两位数字形式的小时,24 小时(00,01, . . ., 23)
%h, %I 两位数字形式的小时,12 小时(01,02, . . ., 12)
%k 数字形式的小时,24 小时(0,1, . . ., 23)
%l 数字形式的小时,12 小时(1, 2, . . ., 12)
%T 24 小时的时间形式(h h : m m : s s)
%r 12 小时的时间形式(hh:mm:ss AM 或hh:mm:ss PM)
%p AM 或P M
%W 一周中每一天的名称( S u n d a y, Monday, . . ., Saturday)
%a 一周中每一天名称的缩写( Sun, Mon, . . ., Sat)
%d 两位数字表示月中的天数( 00, 01, . . ., 31)
%e 数字形式表示月中的天数( 1, 2, . . ., 31)
%D 英文后缀表示月中的天数( 1st, 2nd, 3rd, . . .)
%w 以数字形式表示周中的天数( 0 = S u n d a y, 1=Monday, . . ., 6=Saturday)
%j 以三位数字表示年中的天数( 001, 002, . . ., 366)
% U 周(0, 1, 52),其中Sunday 为周中的第一天
%u 周(0, 1, 52),其中Monday 为周中的第一天
%M 月名(J a n u a r y, February, . . ., December)
%b 缩写的月名( J a n u a r y, February, . . ., December)
%m 两位数字表示的月份( 01, 02, . . ., 12)
%c 数字表示的月份( 1, 2, . . ., 12)
%Y 四位数字表示的年份
%y 两位数字表示的年份
%% 直接值“%”
select date_format(日期字段,’%Y-%m-%d’) as ‘日期’ from test
呵呵 基本上就这些了,一会好好表现哟。。。。。。
1、你试试将后面的1973-11-30加上引号(')
2、检查FROM_UNIXTIME函数的返回数据类型,将1973-11-30转换为与之对应的类型。
addTime字段很明显是一个datetime类型,在数据库中实际上保存的是一个秒值(记得好像是从1970年某个时间开始),FROM_UNIXTIME(addTime,'%Y-%m-%d ')应该是将这个datetime按照年、月、日格式输出。但FROM_UNIXTIME究竟返回什么数据类型,则要看函数定义了。