在SQL中,日期对于新手来说很复杂,因为在使用数据库时,表中日期的格式必须与输入日期匹配才能插入。在各种情况下,使用日期时间(时间也与日期有关)来代替日期。
在MySql中,默认的日期函数是:
- NOW():返回当前日期和时间。例子:
SELECT NOW();
输出:
2017-01-13 08:03:52
- CURDATE() :返回当前日期。例子:
SELECT CURDATE();
输出:
2017-01-13
- CURTIME():返回当前时间。例子:
SELECT CURTIME();
输出:
08:05:15
- DATE() :提取日期或日期/时间表达式的日期部分。例子:
对于名为“测试”的下表
Id Name BirthTime 4120 Pratik 1996-09-26 16:44:15.581 SELECT Name, DATE(BirthTime) AS BirthDate FROM Test;
输出:
Name BirthDate Pratik 1996-09-26 - EXTRACT():返回日期/时间的单个部分。句法:
EXTRACT(unit FORM date);
可以考虑几个单位,但仅使用一些单位,例如:
微秒,秒,分钟,小时,天,周,月,季,年等
“日期”是有效的日期表达式。例子:
对于名为“测试”的下表Id Name BirthTime 4120 Pratik 1996-09-26 16:44:15.581 查询
-
SELECT Name, Extract(DAY FROM BirthTime) AS BirthDay FROM Test;
输出:
Name BirthDay Pratik 26 -
SELECT Name, Extract(YEAR FROM BirthTime) AS BirthYear FROM Test;
输出:
Name BirthYear Pratik 1996 -
SELECT Name, Extract(SECOND FROM BirthTime) AS BirthSecond FROM Test;
输出:
Name BirthSecond Pratik 581
-
- DATE_ADD():将指定的时间间隔添加到日期
句法:DATE_ADD(date, INTERVAL expr type);
date –有效的日期表达式,expr是我们要添加的间隔数。
和类型可以是以下之一:
微秒,秒,分钟,小时,天,周,月,季,年等例子:
对于名为“测试”的下表Id Name BirthTime 4120 Pratik 1996-09-26 16:44:15.581 查询
-
SELECT Name, DATE_ADD(BirthTime, INTERVAL 1 YEAR) AS BirthTimeModified FROM Test;
输出:
Name BirthTimeModified Pratik 1997-09-26 16:44:15.581 -
SELECT Name, DATE_ADD(BirthTime, INTERVAL 30 DAY) AS BirthDayModified FROM Test;
输出:
Name BirthDayModified Pratik 1996-10-26 16:44:15.581 -
SELECT Name, DATE_ADD(BirthTime, INTERVAL 4 HOUR) AS BirthHourModified FROM Test;
输出:
Name BirthSecond Pratik 1996-10-26 20:44:15.581
-
- DATE_SUB():从日期中减去指定的时间间隔。 DATE_SUB的语法与DATE_ADD相同,只是区别在于DATE_SUB用于减去给定的日期间隔。
- DATEDIFF():返回两个日期之间的天数。语法:
DATEDIFF(date1, date2); date1 & date2- date/time expression
例子:
SELECT DATEDIFF('2017-01-13','2017-01-03') AS DateDiff;
输出:
DateDiff 10 - DATE_FORMAT():以不同的格式显示日期/时间数据。语法:
DATE_FORMAT(date,format);
date是有效日期,格式指定日期/时间的输出格式。可以使用的格式为:
- %a-星期几的缩写名称(周日至周六)
- %b-月份的缩写名称(1月-12月)
- %c-月,数字(0-12)
- %D-带有英语后缀的月份(第0、1、2、3日)
- %d-月份中的天,数字(00-31)
- %e月份中的天,数字(0-31)
- %f微秒(000000-999999)
- %H-小时(00-23)
- %h-小时(01-12)
- %I-小时(01-12)
- %i分钟,数字(00-59)
- %j年的某天(001-366)
- %k小时(0-23)
- %l小时(1-12)
- %M-月名称(1月-12月)
- %m-Month,数字(00-12)
- %p-AM或PM
- %r时间,12小时(hh:mm:ss,后跟AM或PM)
- %S秒(00-59)
- %s秒(00-59)
- %T时间,24小时(hh:mm:ss)
- %U周(00-53),其中星期日是一周的第一天
- %u周(00-53),其中星期一是一周的第一天
- %V周(01-53),其中周日是一周的第一天,与%X一起使用
- %v周(01-53),其中星期一是一周的第一天,与%x一起使用
- %W-工作日名称(星期日至星期六)
- %w-星期几(0 =星期日,6 =星期六)
- 一周的%X年,其中星期日是一周的第一天,四位数,与%V一起使用
- 每周的%x年,其中星期一是一周的第一天,与%v一起使用,四位数
- %Y年,数字,四位数
- %y年,数字,两位数
例子:
DATE_FORMAT(NOW(),'%d %b %y')
结果:
13 Jan 17