Mysql时间函数
http://blog.sina.com.cn/s/blog_6d39dc6f0100m7eo.html
mysql中函数和关键字不区分大小写。下文函数的datetime参数处既可以用时间字符串也可以用时间变量或表达式。
一、获取当前时间
下面几个方法等效,字符串环境输出格式为:YYYY-MM-DD HH:MM:SS,数字环境输出格式为:YYYYMMDDHHMMSS
now()
current_timestamp() / current_timestamp
localtime() /localtime
localtimestamp() /localtimestamp
sysdate()
其他方法执行开始时就得到值了,sysdate()方法在函数中动态获得值。
CURDATE()
CURRENT_DATE() / CURRENT_DATE
这两个方法只获取日期,字符串环境中返回HH:MM:SS格式,数字环境中返回HMMSS格式
CURTIME()
CURRENT_TIME() / CURRENT_TIME
这两个方法只获取时间,数字环境中返回YYYYMMDD格式
UTC_DATE() /UTC_DATE
UTC_TIME() /UTC_TIME
UTC_TIMESTAMP()/UTC_TIMESTAMP
返回UTC时间(世界统一时间,0时区,我国在东8区,所以比我国本地时间慢8小时, 本地时间=UTC时间+8小时)
二、获取时间部分数据
Date(datetime)
返回日期 yyyy-MM-dd
Time(datetime)
返回时间 hh:mm:ss
Year(datetime)
Quarter(datetime)
Month(datetime)
MonthName(datetime)
Day(datetime)
Hour(datetime)
Minute(datetime)
Second(datetime)
MicroSecond(datetime)
DayName(datetime)
返回星期几的名字
Week(datetime)
等于Week(datetime,0)
Week(datetime, 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 |
本年度中有一个周一 |
YearWeek(datetime)
年和周数
Extract( unit From datetime)
unit取值: year, quarter, month, week, day, hour, minute, second, microsecond
year_month, day_hour, day_minute, day_second, day_microsecond, hour_minute, hour_second, hour_microsecond, minute_second, minute_microsecond, second_microsecond
xxx_zzz格式的值表示选取的范围xxxyyyzzz,而不是只选这两项。
DayOfWeek(datetime)
datetime是一周的第几天,(周日为一个星期的第一天,ODBC标准)
DayOfMonth(datetime)
datetime是一月的第几天,1-31
DayofYear(datetime)
datetime是一年的第几天,1-366
WeekDay(datetime)
datetime是一周中的第几天,(周一为一个星期的第0天)
WeekOfYear(datetime)
datetime是一年中的第几周,等于WEEK(datetime,3)。
Last_Day(date)
返回月份中最后一天
三、时间操作
+/-操作符
SELECT "1997-12-31 23:59:59" + INTERVAL 1 SECOND;
-> 1998-01-01 00:00:00
SELECT INTERVAL 1 DAY + "1997-12-31";
-> 1998-01-01
SELECT "1998-01-01" - INTERVAL 1 SECOND;
-> 1997-12-31 23:59:59
Date_Add(datetime, interval expr unit)
unit: day, hour, minute, second, microsecond, week, month, quarter, year
year_month, day_hour, day_minute, day_second, day_microsecond, hour_minute, hour_second, hour_microsecond, minute_second, minute_microsecond, second_microsecond
xxx_zzz格式的值表示选取的范围xxxyyyzzz,而不是只选这两项。
示例:
select DATE_ADD(now(),INTERVAL 3 DAY)
select DATE_ADD(now(),INTERVAL -2.5 hour)
select DATE_ADD(now(),INTERVAL '01:15:30' hour_second)
select DATE_ADD(now(),INTERVAL '- 2 01:15:30' day_second)
AddDate(datetime, INTERVAL expr unit)
AddDate(datetime, days)
AddTime(expr1, expr2)
Date_Sub(datetime, interval expr unit)
用法同Date_Add(datetime, interval expr unit)
SubDate(datetime, INTERVAL expr unit)
SubDate(datetime, days)
SubTime(expr1, expr2)
timestampAdd(uint, interval, datetime_expr)
Period_Add(P,N)
增加N个月到阶段P,P的格式为YYMM或者YYYYMM
select PERIOD_ADD(9801,2); -- 199803
PERIOD_DIFF(P1,P2)
返回P1和P2相差的月数,P的格式为YYMM或者YYYYMM
DateDiff(datetime1, datetime2)
返回相差天数
TimeDiff(datetime1, datetime2)
返回相差时间(hh:mm:ss),两个参数格式必须相同
TimeStampDiff(unit,datetime1,datetime2)
返回日期或日期时间表达式datetime_expr1 和datetime_expr2the 之间的整数差。
unit参数指定结果单位,可用值为:
- FRAC_SECOND 毫秒
- SECOND 秒
- MINUTE 分钟
- HOUR 小时
- DAY 天
- WEEK 星期
- MONTH 月
- QUARTER 季度
- YEAR 年
示例语句:
SELECT TIMESTAMPDIFF(SECOND, '2012-12-21', CURRENT_TIMESTAMP()) AS `Second`;
SELECT * from autotesting_mobiledevice where TIMESTAMPDIFF(SECOND, MDLastSynchTime, NOW())<6000;
注意事项:
秒以上单位的时间差计算都是以秒为基础的。
天数的时间差是以24*60*60(86400)为依据的。假如相差间隔小于86400秒,则为0,如果>=86400秒且<86400*2秒,则为1。
如果单位为分钟,那么计算间隔分钟是以60秒为依据的。假如相差间隔小于60秒,则为0,如果>=60秒且<60*2秒,则为1。
select timestampdiff(day,"2012-08-22 15:15:15","2012-08-23 15:15:16");
1
select timestampdiff(day,"2012-08-22 15:15:17","2012-08-23 15:15:16");
0
三、时间转换
time_to_sec(datetime)
返回总秒数
sec_to_time(seconds)
to_days(date)
from_days(days)
makeDate(year,dayofyear)
makeTime(hour,minute,second)
str_to_date(str,format)
select str_to_date('08.09.2008 08:09:30', '%m.%d.%Y %h:%i:%s'); -- 2008-08-09 08:09:3
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), 这里星期一是星期的第一天
%% 一个文字“%”。
所有的其他字符不做解释被复制到结果中。
date_format(date,format)
time_format(time,format)
get_format(date|time|datetime, 'eur|usa|jis|iso|internal')
获取国家地区的时间格式
unix_timestamp()
返回自1970-1-1 0:00:00 UTC(因为中国是东八区,所以是8:00:00.)开始到当前系统时间为止的秒数
unix_timestamp(datetime)
早于1970-1-1 0:00:00 UTC的时间,返回0
from_unixTime(unix_timestamp)
字符串环境输出格式为:YYYY-MM-DD HH:MM:SS,数字环境输出格式为:YYYYMMDDHHMMSS
from_unixTime(unix_timestamp, format)
convert_tz(datetime, from_tz, to_tz)
时区转换,也可以通过date_add(),date_sub(),timestampadd()等函数实现
select convert_tz('2008-08-08 12:00:00', '+08:00', '+00:00'); -- 2008-08-08 04:00:00
Mysql时间函数的更多相关文章
- MySQL时间函数,用起来比PHP还爽
前一篇写了PHP的时间函数(还是草稿),这一篇就写Mysql的时间函数吧.最近做的项目,关乎权限,于是自然而然的就与有效期联系在了一起.其中有一个功能是生成特殊表格,可以根据用户的选择,按周.月.季. ...
- mysql 时间函数 时间转换函数
时间函数 Now 获取当前时间 current_timestamp 获取当前时间 localtimestamp 时间转换 UNIX_TIMESTAMP "2009-09-15 00:0 ...
- mysql时间函数和时间操作
补 原文链接:http://blog.csdn.net/yuxiayiji/article/details/7480785 select timediff('23:40:00', ' 18:30:00 ...
- MySQL 时间函数加减计算
一.MySQL 获得当前日期时间 函数 1.1 获得当前日期 + 时间(date + time) 函数:now() mysql> select now();+———————+| now() |+ ...
- mysql 时间函数date_format
http://toptree.iteye.com/blog/812642今天,在开发邮件系统的时候发现有很多的邮件没有发送成功,想手动把数据修改.找了mysql 的日期函数 获得的pubtime为St ...
- mysql时间函数操作
Mysql时间转换函数 https://blog.csdn.net/w_qqqqq/article/details/88863269 mysql时间日期函数 https://www.cnblogs.c ...
- joda-time的简单使用及mysql时间函数的使用(今天,本周,本月)
近期在做一些首页的统计数据复习了下mysql的时间函数,以及后续修改成 传入时间查询时使用的joda-time 软件简介 JodaTime 提供了一组Java类包用于处理包括ISO8601标准在内的d ...
- mysql 时间函数转换
1 NOW() //当前时间 2 SYSDATE() //当前时间 3 CURRENT_TIMESTAMP 4 以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回当前的 ...
- mysql 时间函数总结
1. 获取当前时间 select now(); // 2018-08-24 11:01:26 select unix_timestamp(); // 1535079695 总结:unix_ ...
随机推荐
- ThinkPHP实现移动端访问自动切换主题模板
ThinkPHP的模板主题机制,如果只是在PC,只要需修改 DEFAULT_THEME (新版模板主题默认是空,表示不启用模板主题功能)配置项就可以方便的实现多模板主题切换. 但对于移动端和PC端,也 ...
- 表现层(jsp)、持久层(类似dao)、业务层(逻辑层、service层)、模型(javabean)、控制层(action)
转自:http://www.blogjava.net/jiabao/archive/2007/04/08/109189.html 为了实现web层(struts)和持久层(Hibernate)之间的松 ...
- Codeforces Gym 100342J Problem J. Triatrip 求三元环的数量 bitset
Problem J. Triatrip Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100342/at ...
- java阿拉伯数字表示的金额转换成中文大写金额
最大数字要处理到千亿也就是12位整数部分我们可以分成3段处理,xxxx亿,xxxx万,xxxx元,然后小数部分比较好处理我们发现0比较难处理什么时候会出现零呢那就是两个数字之间出现一个或多个零那么数字 ...
- 【练习】ViewPager标签滑动
效果图: 布局: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:a ...
- Xamarin Anroid开发教程之验证环境配置是否正确
Xamarin Anroid开发教程之验证环境配置是否正确 经过前面几节的内容已经把所有的编程环境设置完成了,但是如何才能确定所有的一切都处理争取并且没有任何错误呢?这就需要使用相应的实例来验证,本节 ...
- [LintCode] Binary Tree Serialization
Design an algorithm and write code to serialize and deserialize a binary tree. Writing the tree to a ...
- DFS HDOJ 2614 Beat
题目传送门 /* 题意:处理完i问题后去处理j问题,要满足a[i][j] <= a[j][k],问最多能有多少问题可以解决 DFS简单题:以每次处理的问题作为过程(即行数),最多能解决n个问题, ...
- ZOJ3362 Beer Problem(最小费用任意流)
题目大概说有n个城市,由m条无向边相连,每条边每天最多运送cap桶酒且其运送一桶的花费是cost.现在从1号城市开始出发运酒,供应到2到n号城市,这些城市的收购单价是price,问最大的盈利是多少. ...
- HDU4057 Rescue the Rabbit(AC自动机+状压DP)
题目大概是给几个DNA片段以及它们各自的权值,如果一个DNA包含某个片段那么它的价值就加上这个片段的权值,同时包含多个相同DNA片段也只加一次,问长度l的DNA可能的最大价值. 与HDU2825大同小 ...