对于刚学习MySQL的人日期的处理是个大坑。

这里整理了如何处理常见的日期问题。

(这只是我在学习过程中关于日期处理方面知识的总结,会有一些错误和片面的地方。)

Date 函数

函数 描述
NOW() 返回当前的日期和时间
CURDATE() 返回当前的日期
CURTIME() 返回当前的时间
DATE() 提取日期或日期/时间表达式的日期部分
EXTRACT() 返回日期/时间的单独部分
DATE_ADD() 向日期添加指定的时间间隔
DATE_SUB() 从日期减去指定的时间间隔
DATEDIFF() 返回两个日期之间的天数
DATE_FORMAT() 用不同的格式显示日期/时间

NOW()等

NOW(), CURDATA(), CURTIME()这三个函数用来获得当前的时间,但是格式不同

例:

NOW(), CURDATA(), CURTIME()的对比

SELECT NOW(), CURDATE(), CURTIME();

结果如下:

NOW() CURDATE() CURTIME()
2016-08-19 09:19:16 2016-08-19 09:19:16

DATE()

DATE()函数用来提取日期或日期/时间表达式的日期部分

比如我们有date=‘2016-08-19 09:19:16’为了获得日期我们可以使用语句:DATE(date)—>2016-08-19

注意:

1.参数date必须是合法的日期表达式
2.无论date是什么格式结果一定为:Y-m-d

例:

SELECT DATE('2016/08/19 09:19:16');

结果:2016-08-19

EXTRACT()

用于返回日期/时间的单独部分,比如年、月、日、小时、分钟等等。

EXTRACT(unit FROM date)

unit为要返回的参数类型

下表为常用unit

Unit 意义
MICROSECOND 微秒
SECOND
MINUTE 分钟
HOUR 小时
DAY
WEEK 星期几
MONTH 月份
QUARTER 一年分成四分1~4
YEAR

例:

SELECT EXTRACT(MINUTE FROM '2016/08/19 09:19:16');

结果:19

DATE_ADD/SUB()

用于向日期添加或减去指定的时间间隔。

DATE_ADD(date,INTERVAL expr type)
DATE_ADD(date,INTERVAL expr type)

date 参数是合法的日期表达式。

expr 参数是您希望添加的时间间隔。

type 表示时间的类型常用值可参考上面Unit表

例子:

SELECT DATE_ADD('2016/08/19 09:19:16',INTERVAL 5 DAY);
#结果为:2016-08-24 09:19:16
SELECT DATE_SUB('2016/08/19 09:19:16',INTERVAL 5 YEAR);
#结果为:2011-08-19 09:19:16

DATEDIFF()

返回两个日期之间的天数。

DATEDIFF(date1,date2)

date1-date2

(只有日期部分参与计算)

SELECT DATEDIFF('2016-08-19','2008-08-20')

结果: -1

DATE_FORMAT()

在日期格式化部分详细讲。

Date 数据类型

类型 格式
DATE 格式:YYYY-MM-DD
DATETIME 格式:YYYY-MM-DD HH:MM:SS
TIMESTAMP 格式:YYYY-MM-DD HH:MM:SS
YEAR 格式:YYYY 或 YY

日期格式化

DATE_FORMAT() 函数用于以不同的格式显示日期/时间数据。

DATE_FORMAT(date,format)

date:合法的日期表达式。

format:格式化形式。

比如说我想获取当前的年份

DATE_FORMAT(NOW(), '%Y'); 
格式 描述
%a 缩写星期名
%b 缩写月名
%c 月,数值
%D 带有英文前缀的月中的天
%d 月的天,数值(00-31)
%e 月的天,数值(0-31)
%f 微秒
%H 小时 (00-23)
%h 小时 (01-12)
%I 小时 (01-12)
%i 分钟,数值(00-59)
%j 年的天 (001-366)
%k 小时 (0-23)
%l 小时 (1-12)
%M 月名
%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 位

常见的日期问题举例

假设我们有一张表:user_test

id name DoB
1 王一 1994-05-06
2 李二 1993-09-10
3 张三 1990-01-21
4 赵四 1995-11-23

建表语句:

CREATE TABLE user_test
(id INT(3) PRIMARY KEY,
name VARCHAR(10) NOT NULL,
DoB DATE not NULL);

类型一.查找出生日期晚于某时的记录

例:查找出生日期晚于1993年的记录

SELECT *
FROM user_test
WHERE DoB >'1993-01-01'

结果:

id name DoB
1 王一 1994-05-06
2 李二 1993-09-10
4 赵四 1995-11-23

类型二.查找XX时出生的记录

例:查找9月份出生的记录

SELECT *
FROM user_test
WHERE EXTRACT(MONTH FROM DoB) = '9';
#先用EXTRACT()提取出月份再对比。

结果:

id name DoB
2 李二 1993-09-10

类型三.查找XX年龄段的记录

例:查找出23岁以下的记录

SELECT *
FROM user_test
WHERE DATE_FORMAT(NOW(),'%Y') - DATE_FORMAT(DoB,'%Y') <23;
#使用DATE_FORMAT()函数格式化时间方便比较。

结果:

id name DoB
1 王一 1994-05-06
4 赵四 1995-11-23

类型四.将日期转换格式表示

表中的日期格式是Y-m-d

如果想转换为Y/m/d则如下:

SELECT name, DATE_FORMAT(DoB,'%Y/%m/%d')
FROM user_test;
name DoB
王一 1994/05/06
李二 1993/09/10
张三 1990/01/21
赵四 1995/11/23

其他格式同理。通过DATE_FORMAT()函数实现。

MySQL日期处理(笔记)的更多相关文章

  1. MYSQL时间戳和日期相互转换 笔记整理

    相关函数: date_format(date, format) 函数,MySQL日期格式化函数date_format() unix_timestamp() 函数 str_to_date(str, fo ...

  2. MySQL日期 字符串 时间戳互转

    平时比较常用的时间.字符串.时间戳之间的互相转换,虽然常用但是几乎每次使用时候都喜欢去搜索一下用法:本文将作为一个笔记,整理一下三者之间的 转换(即:date转字符串.date转时间戳.字符串转dat ...

  3. mysql颠覆实战笔记(五)--商品系统设计(二):定时更新商品总点击量

    继续回到沈老师的MYSQL颠覆实战,首先回顾下上一节课的内容,请大家会看下上节课写的存储过程. 打开prod_clicklog表, 我们只要把日期(不含时分秒)的部分存在数据库中, 如果同一日期有相同 ...

  4. [转]MySQL日期与时间戳常用函数

    本文原文地址:https://www.cnblogs.com/jhy-ocean/p/5560857.html 平时比较常用的时间.字符串.时间戳之间的互相转换,虽然常用但是几乎每次使用时候都喜欢去搜 ...

  5. MySQL日期、字符串、时间戳互转

    平时比较常用的时间.字符串.时间戳之间的互相转换,虽然常用但是几乎每次使用时候都喜欢去搜索一下用法:本文将作为一个笔记,整理一下三者之间的 转换(即:date转字符串.date转时间戳.字符串转dat ...

  6. MYSQL数据库学习笔记1

      MYSQL数据库学习笔记1 数据库概念 关系数据库 常见数据库软件 SQL SQL的概念 SQL语言分类 数据库操作 创建数据库 查看数据库的定义 删除数据库 修改数据库 创建表 数据类型 约束 ...

  7. 基于【 MySql 】二 || mysql详细学习笔记

    mysql重点学习笔记 /* Windows服务 */ -- 启动MySQL net start mysql -- 创建Windows服务 sc create mysql binPath= mysql ...

  8. MySQL 日期、字符串、时间戳互转

    背景 原文地址:https://www.cnblogs.com/jhy-ocean/p/5560857.html 平时比较常用的时间.字符串.时间戳之间的互相转换,虽然常用但是几乎每次使用时候都喜欢去 ...

  9. (2.2)【转】mysql的SQL笔记

    一千行 MySQL 详细学习笔记 IT技术思维 4月1日 ↑↑↑点上方蓝字关注并星标⭐「IT技术思维」 一起培养顶尖技术思维 作者:格物 原文链接:https://shockerli.net/post ...

  10. MySQL:提高笔记-5

    MySQL:提高笔记-5 学完基础的语法后,进一步对 MySQL 进行学习,前几篇为: MySQL:提高笔记-1 MySQL:提高笔记-2 MySQL:提高笔记-3 MySQL:提高笔记-4 MySQ ...

随机推荐

  1. 模拟淘宝登录和购物车功能:使用cookie记录登录名,下次登录时能够记得上次的登录名,使用cookie模拟购物车功能,使用session记住登录信息并验证是否登录,防止利用url打开网站,并实现退出登录功能

    Login <%@ page language="java" contentType="text/html; charset=UTF-8" pageEnc ...

  2. Atitit. Atiposter 发帖机 新特性 poster new feature v11  .docx

    Atitit. Atiposter 发帖机 新特性 poster new feature v11  .docx 1.1.  版本历史1 2. 1. 未来版本规划2 2.1. V12版本规划2 2.2. ...

  3. WebBrowser设置Cookie

    在winform里面经常会用到WebBrowser,这是一个难点就是如何设置cookies,注意,Docment对象是只读的,所以WebBrowser.Docment.cookie也就只有get方法, ...

  4. java 面向对象

    Java语言是纯粹的面向对象的程序设计语言,这主要表现为Java完全支持面向对象的三种基本特征:继承.封装和多态.Java语言完全以对象为中心,Java程序的最小程序单位是类,整个Java程序由一个一 ...

  5. gradle.properties

    gradle.properties # If this is set, then multiple APK files will be generated: One per native platfo ...

  6. Android属性动画之ObjectAnimator控制

    Android为我们提供了大量的动画效果,如何通过这些动画来达到我们需要的效果呢?今天就为大家总结一下ObjectAnimator动画控制事件. 该项目的的布局文件只有两个控件:ImageView和B ...

  7. jsp获得文件的绝对路径

    当前WEB应用的物理路径:<%=application.getRealPath("/")%>当前访问的JSP文件的物理路径:<%=application.getR ...

  8. codeforces Gargari and Permutations(DAG+BFS)

    /* 题意:求出多个全排列的lcs! 思路:因为是全排列,所以每一行的每一个数字都不会重复,所以如果有每一个全排列的数字 i 都在数字 j的前面,那么i, j建立一条有向边! 最后用bfs遍历整个图, ...

  9. MySQL5.6忘记root密码(win平台)

    1.首先net stop mysql服务,并且切换到任务管理器,有与mysql有关的,最好关闭进程. 2.运行CMD命令切换到MySql安装bin目录,下面是我的mysql安装目录 cd  C:\Pr ...

  10. jQuery.noConflict()

    转载:http://blog.163.com/mjuxiaom@126/blog/static/13397047120117324320858/ 运行这个函数将变量$的控制权让渡给第一个实现它的那个库 ...