MYSQL基础03(日期函数)
工作中对日期的处理是经常遇到的,需求可能多种多样,因此重点介绍。
1.获取当前日期
select NOW()
-- 结果:2015-10-28 22:41:11
select NOW(),SLEEP(3),NOW()
-- 结果 2015-10-28 22:43:34 0 2015-10-28 22:43:34 SELECT SYSDATE(),SLEEP(3),SYSDATE()
-- 结果 2015-10-28 22:46:48 0 2015-10-28 22:46:52
-- NOW()是sql执行前就得到,而SYSDATE()是该函数执行时才得到,一般来说NOW()已经足够,所以更常用
2.日期格式化
DATE_FORMAT(date,format) 注: 该函数返回的是字符串类型
根据format字符串格式化date值
(在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), 这里星期一是星期的第一天
%% 字符% )
-- 根据上面的参数,我们可以得到各种各样的日期格式,比mssql的convert函数强大太多了,以下是常用的标准日期格式
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d') -- 2015-10-28
SELECT DATE_FORMAT(NOW(),'%y-%m-%d') -- 15-10-28
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s') -- 2015-10-28 22:10:56
3.日期截取
-- 获取日期当天是星期几(1=星期天,2=星期一....7=星期六)
SELECT DAYOFWEEK(now())
-- 获取日期当天是几号
SELECT DAYOFMONTH('2015-10-28') -- 结果28
-- 获取日期当天是一年中的第几天
SELECT DAYOFYEAR('2015-10-28') -- 结果 301 -- 获取日期的年份
SELECT YEAR('2015-10-28') -- 结果 2015
-- 获取日期第几季度
SELECT QUARTER('2015-10-28') -- 结果 4
-- 获取日期的月份
SELECT MONTH('2015-10-28') -- 结果 10
-- 获取日期是第几周
SELECT WEEK('2015-10-28') -- 结果43 (默认星期天为一周的第一天)
SELECT WEEK('2015-10-28',0) -- 结果43 (星期天为一周的第一天)
SELECT WEEK('2015-10-28',1) -- 结果44 (星期一为一周的第一天)
-- 获取日期的小时
SELECT HOUR('2015-10-28 23:11:56') -- 结果 23
-- 获取日期的分钟
SELECT MINUTE('2015-10-28 23:11:56') -- 结果 11
-- 获取日期的秒钟
SELECT SECOND('2015-10-28 23:11:56') -- 结果 56
-- 获取日期部分
SELECT DATE('2015-10-28 23:11:56') -- 结果'2015-10-28'
-- 获取时间部分
SELECT TIME('2015-10-28 23:11:56') -- 结果'23:11:56'
4.日期运算
DATE_ADD(date,INTERVAL expr type)
[type值 含义 期望的expr格式]:
SECOND 秒 SECONDS
MINUTE 分钟 MINUTES
HOUR 时间 HOURS
DAY 天 DAYS
MONTH 月 MONTHS
YEAR 年 YEARS
MINUTE_SECOND 分钟和秒 "MINUTES:SECONDS"
HOUR_MINUTE 小时和分钟 "HOURS:MINUTES"
DAY_HOUR 天和小时 "DAYS HOURS"
YEAR_MONTH 年和月 "YEARS-MONTHS"
HOUR_SECOND 小时, 分钟, "HOURS:MINUTES:SECONDS"
DAY_MINUTE 天, 小时, 分钟 "DAYS HOURS:MINUTES"
DAY_SECOND 天, 小时, 分钟, 秒 "DAYS HOURS:MINUTES:SECONDS"
expr中允许任何标点做分隔符,如果所有是DATE值时结果是一个DATE值,否则结果是一个DATETIME值)
如果type关键词不完整,则MySQL从右端取值,DAY_SECOND因为缺少小时分钟等于MINUTE_SECOND)
如果增加MONTH、YEAR_MONTH或YEAR,天数大于结果月份的最大天数则使用最大天数)
-- 说明 正号为加法,负号为减法
-- 增加4天
SELECT DATE_ADD('2015-10-28 23:11:56', INTERVAL 4 DAY ) --2015-11-01 23:11:56
-- 减少3天
SELECT DATE_ADD('2015-10-28 23:11:56', INTERVAL -3 DAY ) -- 2015-10-25 23:11:56
-- 增加1年
SELECT DATE_ADD('2015-10-28 23:11:56', INTERVAL 1 YEAR ) --
2016-10-28 23:11:56
-- 增加1天3小时
SELECT DATE_ADD('2015-10-28 23:11:56', INTERVAL '1 3' DAY_HOUR ) -- 2015-10-27 20:11:56
-- 减1天1小时1分1秒
SELECT DATE_ADD('2015-10-28 23:11:56', INTERVAL '-1 1:1:1' DAY_SECOND) -- 2015-10-27 22:10:55
5.日期比较
-- 计算2个日期间隔的天数
SELECT DATEDIFF('2015-10-28','2015-10-26') -- 结果2
-- 计算2个日期间隔的时分秒
SELECT TIMEDIFF('2015-10-28 23:11:56','2015-10-28 20:11:56') -- 结果 03:00:00
6.日期转化
-- 将日期转化为天数 (西元0年至今多少天)
SELECT TO_DAYS('2015-10-28 23:11:56') -- 结果 736264
SELECT TO_DAYS('0000-00-00 00:00:00') -- 结果 0
-- 将日期转化为秒数 (从'1970-01-01 00:00:00'GMT开始的秒数)
select UNIX_TIMESTAMP('2015-10-28 23:11:56') -- 结果 1446045116 -- 将时间转化为秒数
SELECT TIME_TO_SEC('01:00:05'); -- 结果 3605
-- 将秒数转化为日期
SELECT SEC_TO_TIME(3605); -- '01:00:05'
以上 ,参考资料:http://www.cnblogs.com/zeroone/archive/2010/05/05/1727659.html
注意问题
1. DATE_FORMAT
-- 错误示例
SELECT * FROM mytable WHERE create_date>=DATE_FORMAT(NOW(),'%Y-%m-%d')
-- 说明: DATE_FORMAT返回的是字符串,所以不能直接与日期字段比较,这个问题我工作中已经遇到过了 -- 解决办法 使用DATE,返回日期类型
SELECT * FROM mytable WHERE create_date>=DATE(NOW());
功能实现
-- 根据日期获取当月初与当月末
SET @DATE_B:=DATE(DATE_FORMAT('2015-10-28','%Y-%m-1'));
SET @DATE_E:=DATE_ADD(DATE_ADD(@DATE_B,INTERVAL 1 MONTH),INTERVAL -1 DAY);
SELECT @DATE_B,@DATE_E
MYSQL基础03(日期函数)的更多相关文章
- MYSQL系列-MYSQL基础增强(Myql函数)
MYSQL基础增强(Myql函数) 在这里只介绍一些常用的,比较新颖的: 字符串函数: CONCAT://字符串连接函数 mysql> SELECT CONCAT('My', 'S', 'QL' ...
- MySQL基础之 日期时间函数
基础日期函数和时间函数 1.CURDATE()函数:返回当前只带有年月日格式的日期 2.CURTIME()函数:返回当前只带有时分秒格式的时间 3.NOW()函数:返回当前日期和时间 4.UNIX_T ...
- [转]详细的mysql时间和日期函数
这里是一个使用日期函数的例子.下面的查询选择了所有记录,其date_col的值是在最后30天以内: mysql> SELECT something FROM table WHERE TO_DAY ...
- mysql中时间日期函数
转自:mysql 中 时间和日期函数 一.MySQL 获得当前日期时间 函数 1.1 获得当前日期+时间(date + time)函数:now() mysql> select now(); +- ...
- mysql-查询一天,一周,一月,一年,以及mysql的基本日期函数
查询一天: select * from table where to_days(column_time) = to_days(now()); select * from table where dat ...
- mysql语句中日期函数和日期的加减运算
一.秒数和时钟格式的互相转化 SEC_TO_TIME(seconds) 返回seconds参数,变换成小时.分钟和秒,值以'HH:MM:SS'或HHMMSS格式化,取决于函数是在一个字符串还是在数字. ...
- MySQL基础 - 内置函数
Concat() 用于连接字段,一般DBMS使用+或者||. ex: 注意:上图中新检索出来的列名为'CONCAT(id, '->', name)'(实际上没有列名),这样虽然不影响在MySQL ...
- MySQL基础之常用函数
数学函数的使用 常用数学函数 函数 作用 函数 作用 ceil() 进一取整 abs() 取绝对值 floor() 舍掉小数部分 power() 幂运算 round() 四舍五入 pi() 圆周率 t ...
- MySql中使用日期函数获取昨天的数据
.body-classic{ color:#444; font-family:Georgia, Palatino, 'Palatino Linotype', Times, 'Times New Rom ...
随机推荐
- oracle之报错:ORA-00054: 资源正忙,要求指定 NOWAIT_数据库的几种锁
问题如下: SQL> conn scott/tiger@vm_databaseConnected to Oracle Database 11g Enterprise Edition Releas ...
- GifCam
转载:http://blog.bahraniapps.com/?page_id=21 下载 http://pan.baidu.com/s/1c0vdHIw GifCam Note:GifCam c ...
- Python练习题 027:对10个数字进行排序
[Python练习题 027] 对10个数字进行排序 --------------------------------------------- 这题没什么好说的,用 str.split(' ') 获 ...
- ios - 带动画圆形旋转的进度条
#import <UIKit/UIKit.h> @interface TJCircleProgressView : UIView /** * 图标 */ @property(nonatom ...
- 自己调用NTDLL函数
一.概述 在DLL初始化的时候有时不能调用其它系统DLL的函数,以免导致问题,但有时候又必须要调用怎么办?一种办法就是自己直接调用NTDLL接口,这样肯定没有问题. 下面我写个自己调用Registry ...
- MySQL优化之COUNT(*)效率
MySQL优化之COUNT(*)效率 刚给一个朋友解决他写的Discuz!插件的问题,说到MySQL的COUNT(*)的效率,发现越说越说不清楚,干脆写下来,分享给大家. COUNT(*)与COUNT ...
- Oracle 11g R2 for Win7旗舰版(64位)的安装步骤
1.下载Oracle 11g R2 for Windows的版本 下载地址:http://www.oracle.com/technetwork/database/enterprise-edition/ ...
- maven install与maven package 的区别
mvn install 是将你打好的jar包安装到你的本地库中,一般没有设置过是在 用户目录下的 .m2\下面.mvn package 只是将你的代码打包到输出目录,一般的是 target下面.
- 连续区间覆盖染色问题 ------ SHUOJ 1716
题目链接:http://202.121.199.212/JudgeOnline/problem.php?id=1716 [题意] 1到N的区间,一种操作让编号从a到b的数变为z,但不会低于2,问多次操 ...
- 转: ant condition使用
评注: 用c语言的方式来,比喻ant...比较好理解 转: http://www.smithfox.com/?e=176 [备忘] Apache Ant中的逻辑判断 [原创链接: http://www ...