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

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. Android 和 PHP 之间进行数据加密传输

    Android 和 PHP 之间进行数据加密传输 [代码] [Java]代码 1 mcrypt = new MCrypt(); 2 /* Encrypt */ 3 String encrypted = ...

  2. 推荐《Linux 多线程服务器端编程》

    赖勇浩(http://laiyonghao.com) 最近,有一位朋友因为工作需要,需要从网游的客户端编程转向服务器端编程,找我推荐一本书.我推荐了<Linux 多线程服务器端编程——使用 mu ...

  3. iOS开发——多线程OC篇&多线程总结

    多线程总结 //1.NSThread /** 优点:NSThread 比其他两个轻量级. 缺点:需要自己管理线程的生命周期,线程同步,线程同步时对数据的加锁会有一定的系统开销. cocoa给我提供了两 ...

  4. C++基础之预处理命令

    目录 概述——对预处理命令的理解 预处理命令的处理时间 C++中主要的预处理命令 宏定义 “文件包含”处理 选择编译 概述 使用C++的预处理命令可以提高程序的可维护性,有利于程序员以更加方便和快捷的 ...

  5. cocos2d-x android 字体的设置

    我们知道 ios 自带的字体 和 android 自带的字体不同 为了使我们开发的游戏中的字体统一 我们就需要自己的字体(包括从mac 拷贝出来的 字体) 从 mac 中 copy 出 Thonbur ...

  6. Perl 内部结构详解

    PerlGuts Illustrated Version 0.49, for perl 5.20 and older This document is meant to supplement the  ...

  7. RosettaNet

    RosettaNet 这一名字源自于 1799 年在埃及发现的 Rosetta Stone .这要追溯到公元前 196 年,该石头是在 Rosetta (Rashid) 镇附近被人发现的,上面用两种不 ...

  8. nopCommerce 数据库初试化及数据操作

    系统启动时执行任务:IStartupTask,启动时执行的任务主要是数据库的初始化和加载. IStartupTask调用IEfDataProvider进行数据库的初始化. IEfDataProvide ...

  9. Linq lamda表达式Single和First方法

      让我们来看看如何对一个整数数组使用 Single 操作符.这个整数数组的每个元素代表 2 的 1 到 10 次方.先创建此数组,然后使用 Single 操作符来检索满足 Linq Lambda表达 ...

  10. 十六进制字节 & 十六进制转二进制

    做项目也将近一年的时间了.从一开始就经常提到“一个十六进制字节”,然而一开始就是迷惑的,直到现在.     一个十六进制字节,比如:FF.周围的人经常说这是一个十六进制字节.然后我就想,这不是两个字符 ...