MySQL的Data_ADD函数与日期格式化函数说明
- date_add(date,interval expr type) date_sub(date,interval expr type)
这些函数执行日期运算。 date 是一个 datetime 或date值,用来指定起始时间。 expr 是一个表达式,用来指定从起始日期添加或减去的时间间隔值。 expr是一个字符串;对于负值的时间间隔,它可以以一个 ‘-'开头。 type 为关键词,它指示了表达式被解释的方式。
关键词interva及 type 分类符均不区分大小写。
以下表显示了type 和expr 参数的关系:
type 值 |
预期的 expr 格式 |
microsecond |
microseconds |
second |
seconds |
minute |
minutes |
hour |
hours |
day |
days |
week |
weeks |
month |
months |
quarter |
quarters |
year |
years |
second_microsecond |
'seconds.microseconds' |
minute_microsecond |
'minutes.microseconds' |
minute_second |
'minutes:seconds' |
hour_microsecond |
'hours.microseconds' |
hour_second |
'hours:minutes:seconds' |
hour_minute |
'hours:minutes' |
day_microsecond |
'days.microseconds' |
day_second |
'days hours:minutes:seconds' |
day_minute |
'days hours:minutes' |
day_hour |
'days hours' |
year_month |
'years-months' |
mysql 允许任何expr 格式中的标点分隔符。表中所显示的是建议的 分隔符。若 date 参数是一个 date 值,而你的计算只会包括 year、month和day部分(即, 没有时间部分), 其结果是一个date 值。否则,结果将是一个 datetime值。
若位于另一端的表达式是一个日期或日期时间值 , 则interval expr type只允许在 + 操作符的两端。对于 –操作符, interval expr type 只允许在其右端,原因是从一个时间间隔中提取一个日期或日期时间值是毫无意义的。 (见下面的例子)。
mysql> select '1997-12-31 23:59:59' + interval 1 second;
-> '1998-01-01 00:00:00'
mysql> select interval 1 day + '1997-12-31';
-> '1998-01-01'
mysql> select '1998-01-01' - interval 1 second;
-> '1997-12-31 23:59:59'
mysql> select date_add('1997-12-31 23:59:59',
-> interval 1 second);
-> '1998-01-01 00:00:00'
mysql> select date_add('1997-12-31 23:59:59',
-> interval 1 day);
-> '1998-01-01 23:59:59'
mysql> select date_add('1997-12-31 23:59:59',
-> interval '1:1' minute_second);
-> '1998-01-01 00:01:00'
mysql> select date_sub('1998-01-01 00:00:00',
-> interval '1 1:1:1' day_second);
-> '1997-12-30 22:58:59'
mysql> select date_add('1998-01-01 00:00:00',
-> interval '-1 10' day_hour);
-> '1997-12-30 14:00:00'
mysql> select date_sub('1998-01-02', interval 31 day);
-> '1997-12-02'
mysql> select date_add('1992-12-31 23:59:59.000002',
-> interval '1.999999' second_microsecond);
-> '1993-01-01 00:00:01.000001'
若你指定了一个过于短的时间间隔值 (不包括type 关键词所预期的所有时间间隔部分), mysql 假定你已经省去了时间间隔值的最左部分。 例如,你指定了一种类型的day_second, expr 的值预期应当具有天、 小时、分钟和秒部分。若你指定了一个类似 '1:10'的值, mysql 假定天和小时部分不存在,那么这个值代表分和秒。换言之, '1:10' day_second 被解释为相当于 '1:10' minute_second。这相当于 mysql将time 值解释为所耗费的时间而不是日时的解释方式。
假如你对一个日期值添加或减去一些含有时间部分的内容,则结果自动转化为一个日期时间值:
mysql> select date_add('1999-01-01', interval 1 day);
-> '1999-01-02'
mysql> select date_add('1999-01-01', interval 1 hour);
-> '1999-01-01 01:00:00'
假如你使用了格式严重错误的日期,则结果为 null。假如你添加了 month、year_month或year ,而结果日期中有一天的日期大于添加的月份的日期最大限度,则这个日期自动被调整为添加月份的最大日期:
mysql> select date_add('1998-01-30', interval 1 month);
-> '1998-02-28'
- date_format(date,format)
根据format 字符串安排date 值的格式。
以下说明符可用在 format 字符串中:
说明符 |
说明 |
%a |
工作日的缩写名称 (sun..sat) |
%b |
月份的缩写名称 (jan..dec) |
%c |
月份,数字形式(0..12) |
%d |
带有英语后缀的该月日期 (0th, 1st, 2nd, 3rd, ...) |
%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 |
月份名称 (january..december) |
%m |
月份, 数字形式 (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 |
该周的年份,其中周日为每周的第一天, 数字形式,4位数;和%v同时使用 |
%x |
该周的年份,其中周一为每周的第一天, 数字形式,4位数;和%v同时使用 |
%y |
年份, 数字形式,4位数 |
%y |
年份, 数字形式 (2位数) |
%% |
‘%'文字字符 |
所有其它字符都被复制到结果中,无需作出解释。
注意, ‘%'字符要求在格式指定符之前。
月份和日期说明符的范围从零开始,原因是 mysql允许存储诸如 '2004-00-00'的不完全日期.
mysql> select date_format('1997-10-04 22:23:00', '%w %m %y');
-> 'saturday october 1997'
mysql> select date_format('1997-10-04 22:23:00', '%h:%i:%s');
-> '22:23:00'
mysql> select date_format('1997-10-04 22:23:00',
'%d %y %a %d %m %b %j');
-> '4th 97 sat 04 10 oct 277'
mysql> select date_format('1997-10-04 22:23:00',
'%h %k %i %r %t %s %w');
-> '22 22 10 10:23:00 pm 22:23:00 00 6'
mysql> select date_format('1999-01-01', '%x %v');
-> '1998 52'
推荐阅读
-
MySQL的Data_ADD函数与日期格式化函数说明
-
浅谈SQLServer的ISNULL函数与Mysql的IFNULL函数用法详解
-
SqlServer中的日期与时间函数
-
ms sql server中实现的unix时间戳函数(含生成和格式化,可以和mysql兼容)
-
mysql的日期和时间函数大全第1/2页
-
asp的一个日期格式化函数
-
浅谈SQLServer的ISNULL函数与Mysql的IFNULL函数用法详解
-
MySQL的时间差函数(TIMESTAMPDIFF、DATEDIFF)、日期转换计算函数(date_add、day、date_format、str_to_date)
-
php in_array 函数使用说明与in_array需要注意的地方说明
-
MySQL数据库中CAST与CONVERT函数实现类型转换的讲解