工作中对日期的处理是经常遇到的,需求可能多种多样,因此重点介绍。

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(日期函数)的更多相关文章

  1. MYSQL系列-MYSQL基础增强(Myql函数)

    MYSQL基础增强(Myql函数) 在这里只介绍一些常用的,比较新颖的: 字符串函数: CONCAT://字符串连接函数 mysql> SELECT CONCAT('My', 'S', 'QL' ...

  2. MySQL基础之 日期时间函数

    基础日期函数和时间函数 1.CURDATE()函数:返回当前只带有年月日格式的日期 2.CURTIME()函数:返回当前只带有时分秒格式的时间 3.NOW()函数:返回当前日期和时间 4.UNIX_T ...

  3. [转]详细的mysql时间和日期函数

    这里是一个使用日期函数的例子.下面的查询选择了所有记录,其date_col的值是在最后30天以内: mysql> SELECT something FROM table WHERE TO_DAY ...

  4. mysql中时间日期函数

    转自:mysql 中 时间和日期函数 一.MySQL 获得当前日期时间 函数 1.1 获得当前日期+时间(date + time)函数:now() mysql> select now(); +- ...

  5. mysql-查询一天,一周,一月,一年,以及mysql的基本日期函数

    查询一天: select * from table where to_days(column_time) = to_days(now()); select * from table where dat ...

  6. mysql语句中日期函数和日期的加减运算

    一.秒数和时钟格式的互相转化 SEC_TO_TIME(seconds) 返回seconds参数,变换成小时.分钟和秒,值以'HH:MM:SS'或HHMMSS格式化,取决于函数是在一个字符串还是在数字. ...

  7. MySQL基础 - 内置函数

    Concat() 用于连接字段,一般DBMS使用+或者||. ex: 注意:上图中新检索出来的列名为'CONCAT(id, '->', name)'(实际上没有列名),这样虽然不影响在MySQL ...

  8. MySQL基础之常用函数

    数学函数的使用 常用数学函数 函数 作用 函数 作用 ceil() 进一取整 abs() 取绝对值 floor() 舍掉小数部分 power() 幂运算 round() 四舍五入 pi() 圆周率 t ...

  9. MySql中使用日期函数获取昨天的数据

    .body-classic{ color:#444; font-family:Georgia, Palatino, 'Palatino Linotype', Times, 'Times New Rom ...

随机推荐

  1. innobackupex 备份实验

    [root@localhost ~]# xtrabackup -v xtrabackup version based Linux (x86_64) (revision id: 45cda89) [ro ...

  2. mysql 数据库性能追踪与分析

    http://bbs.linuxtone.org/thread-20601-1-1.html

  3. php 换行 空格分割处理

    <?php function parse_specification($specification){ $rt=array(); $lines=array_filter(preg_split(& ...

  4. find the nth digit

    Problem Description 假设:S1 = 1S2 = 12S3 = 123S4 = 1234.........S9 = 123456789S10 = 1234567891S11 = 12 ...

  5. DataGridView 多线程更新 数据 解决卡顿问题

    使用多线程更新DataGridView,防止页面卡顿和卡死的问题 private delegate void UpdateDataGridView(DataTable dt); private voi ...

  6. C++重载自增/减操作符

    作为类成员使用. 前缀是先加/减1,再取值:后缀是先取值,再加/减1. 前缀是左值,返回引用:后缀是右值,返回值. 后缀多一个int参数进行区分,用时编译器会传个没用的0作实参. 在后缀实现中调用前缀 ...

  7. Boost.Any

    支持类型安全地存储和获取任意类型的值 #include <list> #include <boost/any.hpp> #include <string> #inc ...

  8. [JAVA] HTTP请求,返回响应内容,实例及应用

    JDK 中提供了一些对无状态协议请求(HTTP )的支持,下面我就将我所写的一个小例子(组件)进行描述: 首先让我们先构建一个请求类(HttpRequester ). 该类封装了 JAVA 实现简单请 ...

  9. 8. Android框架和工具之 NineOldAndroids(动画框架)

    1. NineOldAndroids 自Android 3.0以上的版本,SDK新增了一个android.animation包,里面的类都是跟动画效果实现相关的,通过Honeycomb API,能够实 ...

  10. UICollectionView 简单应用和实际操作

    1.网格视图   UICollectionView      网格布局 UICollectionViewFlowLayout系统图自带网格布局 系统自带的网格布局 UICollectionViewFl ...