阅读之前看这里👉:博主是正在学习数据分析的一员,博客记录的是在学习过程中一些总结,也希望和大家一起进步,在记录之时,未免存在很多疏漏和不全,如有问题,还请私聊博主指正。
博客地址:天阑之蓝的博客,学习过程中不免有困难和迷茫,希望大家都能在这学习的过程中肯定自己,超越自己,最终创造自己。


当我们处理日期时,最难的任务恐怕是确保所插入的日期的格式,与数据库中日期列的格式相匹配。
只要数据包含的只是日期部分,运行查询就不会出问题。但是,如果涉及时间,情况就有点复杂了。
在讨论日期查询的复杂性之前,我们先来看看最重要的内建日期处理函数。

返回当前时间和日期

NOW():返回当前的日期和时间
CURDATE():返回当前的日期
CURTIME():返回当前的时间

SELECT 
		NOW() 当前日期和时间,
		CURDATE() 当前日期,
		CURTIME() 当前时间

在这里插入图片描述
下面的 SQL 创建带有日期时间列 (OrderDate) 的 “Orders” 表:

CREATE TABLE Orders
(
	OrderId int not null,
	ProductName varchar(40) not null,
	OrderDate datetime Not NULL DEFAULT NOW(),
	Primary key (OrderId)
)

DEFAULT 修饰符:可以使用 DEFAULT 修饰符为字段设定一个默认值。
当插入记录时,若忘记传该字段的值时,MySQL 会自动为您设置上该字段的默认值。

如果一个字段中没有指定 DEFAULT 修饰符,MySQL 会依据这个字段是 NULL 还是 NOT NULL 自动设置默认值。

如果指定字段可以为 NULL,则 MySQL 为其设置默认值为 NULL。

如果是 NOT NULL 字段,MySQL 对于数值类型插入 0,字符串类型插入空字符串,

时间戳类型插入当前日期和时间,ENUM 类型插入枚举组的第一条

所以:
OrderDate 列规定 NOW() 作为默认值。作为结果,当您向表中插入行时,当前日期和时间自动插入列中。
现在,我们希望在 “Orders” 表中插入一条新记录:

INSERT INTO Orders (OrderId,ProductName) Values (1,'Phone')
Select * from Orders

在这里插入图片描述
我们可以看到自动生成当前时间。

DATE():提取日期或日期/时间表达式的日期部分

Select ProductName, DATE(OrderDate) as 日期
		From Orders

在这里插入图片描述
可以看到日期为2020-6-20,而没有时间。

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

语法:

EXTRACT(unit FROM date)

date 参数是合法的日期表达式。unit 参数可以是下列的值:

Unit 值
MICROSECOND
MINUTE
HOUR
DAY
WEEK
MONTH
QUARTER
YEAR
SECOND_MICROSECOND
MINUTE_MICROSECOND
MINUTE_SECOND
HOUR_MICROSECOND
HOUR_SECOND
HOUR_MINUTE
HOUR_SECOND
DAY_MICROSECOND
DAY_SECOND
DAY_MINUTE
DAY_HOUR
YEAR_MONTH

举例:

Select  EXTRACT(Year From OrderDate) as 当前年份,
				EXTRACT(Month From OrderDate) as 当前月份,
				EXTRACT(Day From OrderDate) as 当前日期,
				EXTRACT(WEEK From OrderDate) as 当前周
		From Orders

在这里插入图片描述

DATE_ADD()函数向日期添加指定的时间间隔。

语法

DATE_ADD(date,INTERVAL expr type)

date 参数是合法的日期表达式。expr 参数是您希望添加的时间间隔。
type 参数可以是下列值:

Type 值
MICROSECOND
MINUTE
HOUR
DAY
WEEK
MONTH
QUARTER
YEAR
SECOND_MICROSECOND
MINUTE_MICROSECOND
MINUTE_SECOND
HOUR_MICROSECOND
HOUR_SECOND
HOUR_MINUTE
HOUR_SECOND
DAY_MICROSECOND
DAY_SECOND
DAY_MINUTE
DAY_HOUR
YEAR_MONTH

举例:

Select  OrderId,OrderDate as 当前日期时间,
				DATE_ADD(OrderDate, INTERVAL 2 DAY) AS 增加2天后日期时间,
				DATE_ADD(OrderDate, INTERVAL 2 HOUR) AS 增加2小时后日期时间,
				DATE_ADD(OrderDate, INTERVAL 2 MINUTE) AS 增加2分钟后日期时间
	From Orders

在这里插入图片描述
注意

在MySQL中,必须要加interval关键字和type值,用于表示是以什么单位求间隔,否则会报错。而hive中默认type值为天,所以可直接用

同理:DATE_SUB()函数从日期减去指定的时间间隔。

Select  OrderId,OrderDate as 当前日期时间,
				DATE_SUB(OrderDate, INTERVAL 2 DAY) AS 减少2天后日期时间,
				DATE_SUB(OrderDate, INTERVAL 2 HOUR) AS 减少2小时后日期时间,
				DATE_SUB(OrderDate, INTERVAL 2 MINUTE) AS 减少2分钟后日期时间
	From Orders

在这里插入图片描述

DATEDIFF()函数返回两个日期之间的天数。

语法:

-- 左边减去右边的
DATEDIFF(date1,date2)  

举例:

Select DATEDIFF('2020-06-16', '2020-6-1') as 日期差

在这里插入图片描述

  • DATE_FORMAT() 函数用于以不同的格式显示日期/时间数据。
    语法:
DATE_FORMAT(date,format)

date 参数是合法的日期。format 规定日期/时间的输出格式。
可以使用的格式有:

格式 描述
%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 位

举例:

Select DATE_FORMAT(NOW(), '%b %d %Y %h:%i %p') as A,
	   DATE_FORMAT(NOW(),'%m-%d-%Y') as B,
       DATE_FORMAT(NOW(),'%d %b %y') as C,
       DATE_FORMAT(NOW(),'%d %b %Y %T:%f') as D 

在这里插入图片描述

感谢大家读到最后,相信大家都学会了Mysql数据库中的日期函数。
如果你想了解更多关于数据库的内容,请转到博主其它博文:
MySQL数据库知识要点归纳和总结

参考:https://www.w3school.com.cn/sql/sql_dates.asp
博主码字不易,请大家关注点个赞再走呗 ^ - ^
在这里插入图片描述

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐