Mysql 中时间日期函数
获取当前日期或时间
--当前日期
SELECT curdate( )
2010-11-15
SELECT CURRENT_DATE( )
2010-11-15
--当前时间
SELECT curtime( )
12:51:35
SELECT CURRENT_TIME( )
12:53:25
--当前日期时间
SELECT now( )
2010-11-15 13:01:40
SELECT CURRENT_TIMESTAMP( )
2010-11-15 12:52:47
注意:在一个单一询问中,对诸如NOW() 的函数多次访问总是会得到同样的结果
日期增减
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值。
SELECT DATE_ADD( '1997-12-31 23:59:59', INTERVAL 1 SECOND ) ;
1998-01-01 00:00:00
SELECT DATE_ADD( '1997-12-31 23:59:59', INTERVAL 1 DAY ) ;
1998-01-01 23:59:59
SELECT DATE_ADD( '1998-01-01 00:00:00', INTERVAL '-1 10' DAY_HOUR ) ;
1997-12-30 14:00:00
--31天前
SELECT DATE_SUB( '1998-01-02', INTERVAL 31 DAY ) ;
1997-12-02
--前一天
SELECT date_add( '2010-11-11', INTERVAL -1 DAY )
2010-11-10
将日期时间转换成指定格式
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'的不完全日期.
SELECT DATE_FORMAT( FROM_UNIXTIME( 875996580 ) , '%Y-%m-%d %H:%i:%s' )
1997-10-05 04:23:00
SELECT DATE_FORMAT( FROM_UNIXTIME( 875996580 ) , '%Y-%m-%d' )
1997-10-05
FROM_UNIXTIME(unix_timestamp) ,
FROM_UNIXTIME(unix_timestamp,format)
返回'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS 格式值的unix_timestamp参数表示,具体格式取决于该函数是否用在字符串中或是数字语境中。
若format 已经给出,则结果的格式是根据format 字符串而定。 format 可以包含同DATE_FORMAT() 函数输入项列表中相同的说明符。
SELECT FROM_UNIXTIME(875996580);
'1997-10-04 22:23:00'
SELECT FROM_UNIXTIME(875996580) + 0;
19971004222300
MySql unix时间转换成SQLServer适用的时间格式
SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(), '%Y-%m-%d %H:%i:%s');
'2010-11-12 17:08:59'
SQLServer适用的时间格式转换成unix时间
UNIX_TIMESTAMP(), UNIX_TIMESTAMP(date)
若无参数调用,则返回一个Unix timestamp ('1970-01-01 00:00:00' GMT 之后的秒数) 作为无符号整数。若用date 来调用UNIX_TIMESTAMP(),它会将参数值以'1970-01-01 00:00:00' GMT后的秒数的形式返回。date 可以是一个DATE 字符串、一个 DATETIME字符串、一个 TIMESTAMP或一个当地时间的YYMMDD 或YYYMMDD格式的数字。
mysql> SELECT UNIX_TIMESTAMP();
-> 882226357
mysql> SELECT UNIX_TIMESTAMP('1997-10-04 22:23:00');
-> 875996580
mysql> SELECT unix_timestamp( '1997-10-04' )
-> 875894400
MySql DateTime 转换成指定格式字符串
更多内容参考:
MySQL在线中文手册