SQL函数——时间函数
1、使用 NOW() 、 CURDATE()、CURTIME() 获取当前时间
在这里我有一个问题想问问大家,你们平时都是怎么样子获取时间的呢?是不是通过手表、手机、电脑等设备了解到的,那么你们有没有想过在在我们 SQL 中是怎么样获得时间的呢?
和其他的语言一样,我们的 SQL 语言也有着属于我们自己的获取时间的方式,接下来就让我带领大家一起来学习一下 SQL 语言是怎么样获取时间的吧。
在 SQL 中,我们可以通过使用 NOW()、CURDATE()、CURTIME() 来获取当前的时间
- NOW() 可以用来返回当前日期和时间 格式:YYYY-MM-DD hh:mm:ss
 - CURDATE() 可以用来返回当前日期 格式:YYYY-MM-DD
 - CURTIME() 可以用来返回当前时间 格式:hh:mm:ss
 
在使用 NOW() 和 CURTIME() 时,如果要精确的秒以后的时间的话,可以在()中加数字,加多少,就表示精确到秒后多少位
比如 NOW(3) 就是精确到毫秒,表示为: 2022-03-11 15:27:20.645
我们可以通过下面的示例来感受一下 NOW () 、CURDATE () 、 CURTIME () 的用法
使用 NOW() 、 CURDATE() 、CURTIME() 函数查询当前日期与时间,并用 current_datetime 、current_date、current_time 作为结果集列名。
mysql> SELECT NOW() AS `current_datetime`,
    -> CURDATE() AS `current_date`,
    -> CURTIME() AS `current_time`;
+---------------------+------------+----------+
| currentDate         | curdate    | cyrtime  |
+---------------------+------------+----------+
| 2023-03-11 13:20:01 | 2023-03-11 | 13:20:01 |
+---------------------+------------+----------+
1 row in set (0.00 sec)
通过上面的示例我们可以看出 NOW() 、 CURDATE() 、CURTIME() 这三个函数有着相似处,也有着一些不同。在实际的案例中,我们可以根据不同的情况,运用不同的函数来达到自己目的。
我们可以通过下面的实例来感受一下 NOW () 的用法。
使用 NOW() 向记录表 records 中插入当前的时间(精确到毫秒)
mysql> INSERT INTO `records` VALUES (NOW(3));
Query OK, 1 row affected
mysql> SELECT `now_time` FROM `records`;
+-------------------------+
| now_time                |
+-------------------------+
| 2021-03-31 15:31:49.091 |
+-------------------------+
2 rows in set
接下来做一个小练习:
向表中插入当前的日期
请编写 SQL 语句,向记录表 records 中插入当前的日期。
表定义: records (记录表)
| 列名 | 类型 | 注释 | 
|---|---|---|
| now_time | date | 现在时间 | 
-- Write your SQL Query here --
-- example: INSERT INTO XX_TABLE VALUES XXX --
INSERT INTO records VALUES (NOW());
2、使用 DATE()、TIME() 函数提取日期和时间
我们将会学习如何将时间中的代表日期的元素和代表时间的元素从时间中提取出来。
就以上一节我们获得的 current_datetime 来说吧,我们已经知道了“现在”的时间是 '2021-03-25 16:16:30',但是在实际运用中,不需要这么的精确,只需要其中的日期或者时间,那么我们应该怎么做呢。或许你会想到再用 CURDATE() 或者CURTIME() 把需要的日期或者时间获取出来不就行了吗。但是你有没有想过时间是会变的, CURDATE() 或者CURTIME() 都是获取当前的,而在某些情况下,时间是固定的,那么我们应该怎么办呢?接下来让我带领大家一起来学习一下如何将时间中的代表日期的元素和代表时间的元素从时间中提取出来。
我们可以通过下面的示例来感受一下 DATE () 、TIME () 的用法
使用 DATE()、TIME() 函数分别将 '2021-03-25 16:16:30' 这组数据中的日期于时间提取出来,并用 date 、time 作为结果集列名。
SELECT DATE('2021-03-25 16:16:30') AS `date`,TIME('2021-03-25 16:16:30')  AS `time`;
+------------+----------+
| date       | time     |
+------------+----------+
| 2021-03-25 | 16:16:30 |
+------------+----------+
1 row in set
通过上面的示例,你是否能理解 DATE()、TIME() 的用法呢?那么让我来考考你吧。在不使用 CURDATE() 函数的情况下,通过这两节我们学到的时间函数方面的知识,将多个函数进行组合的形式来达到相同的效果呢?
如果可以的话说明你已经初步理解了这两节讲到的知识了,那么让我们一起来看看到底应该怎么做呢。
首先我们可以通过 NOW() 获得当前的时间与日期,再使用 DATE() 函数将其中的日期提取出来,具体的用法是这样子的 DATE(NOW()),我们在把他与 CURDATE() 比较一下吧!
mysql> SELECT DATE(NOW()),CURDATE();
+-------------+------------+
| DATE(NOW()) | CURDATE()  |
+-------------+------------+
| 2021-03-25  | 2021-03-25 |
+-------------+------------+
1 row in set
我们可以通过下面的实例来感受一下 DATE () 的用法。
2.1查询课程表中课程的创建日期:
使用 DATE() 函数从课程表 courses 中查询课程的名字 name 和课程创建时间 created_at,从课程创建时间 created_at 中提取出创建课程的日期,并加以格式化,用 created_date 作为结果集列名。
mysql> SELECT `name`, DATE(`created_at`) AS `created_date`
    -> FROM `courses`;
+-------------------------+--------------+
| name                    | created_date |
+-------------------------+--------------+
| Advanced Algorithms     | 2020-06-01   |
| System Design           | 2020-07-18   |
| Django                  | 2020-02-29   |
| Web                     | 2020-04-22   |
| Big Data                | 2020-09-11   |
| Artificial Intelligence | 2018-05-13   |
| Java P6+                | 2019-01-19   |
| Data Analysis           | 2019-07-12   |
| Object Oriented Design  | 2020-08-08   |
| Dynamic Programming     | 2018-08-18   |
+-------------------------+--------------+
10 rows in set
2.2分别查询出课程表的课程创建时间中的日期与时间
使用 DATE() 、 TIME() 函数从课程表 courses 中查询课程的名字 name 和课程创建时间 created_at,从课程创建时间 created_at 中提取出创建课程的日期与时间,用 created_date 和 created_time 作为结果集列名。
mysql> SELECT `name`, `created_at`,
    -> DATE_FORMAT(DATE(`created_at`),"%Y-%m-%d") AS `created_date`,
    -> DATE_FORMAT(TIME(`created_at`),"%H:%i:%s") AS `created_time`
    -> FROM `courses`;
+-------------------------+---------------------+--------------+--------------+
| name                    | created_at          | created_date | created_time |
+-------------------------+---------------------+--------------+--------------+
| Advanced Algorithms     | 2020-06-01 09:10:12 | 2020-06-01   | 09:10:12     |
| System Design           | 2020-07-18 10:11:12 | 2020-07-18   | 10:11:12     |
| Django                  | 2020-02-29 12:10:12 | 2020-02-29   | 12:10:12     |
| Web                     | 2020-04-22 13:01:12 | 2020-04-22   | 13:01:12     |
| Big Data                | 2020-09-11 16:01:12 | 2020-09-11   | 16:01:12     |
| Artificial Intelligence | 2018-05-13 18:12:30 | 2018-05-13   | 18:12:30     |
| Java P6+                | 2019-01-19 13:31:12 | 2019-01-19   | 13:31:12     |
| Data Analysis           | 2019-07-12 13:01:12 | 2019-07-12   | 13:01:12     |
| Object Oriented Design  | 2020-08-08 13:01:12 | 2020-08-08   | 13:01:12     |
| Dynamic Programming     | 2018-08-18 20:01:12 | 2018-08-18   | 20:01:12     |
+-------------------------+---------------------+--------------+--------------+
10 rows in set
3、使用 EXTRACT() 函数提取指定的时间信息
前面我们已经学习了 DATE 函数和 TIME 函数,明白 DATE 返回日期, TIME 返回时间,如果我只想知道年份的信息或者小时的信息,那么该怎么解决呢?这时,我们就可以使用 EXTRACT() 函数来解决问题。
EXTRACT() 函数用于返回日期/时间的单独部分,如 YEAR (年)、MONTH (月)、DAY (日)、HOUR (小时)、MINUTE (分钟)、 SECOND (秒)。
SELECT EXTRACT(unit FROM date)
FROM `table`
其中:
table 是表格名
date 参数是合法的日期表达式。
unit 参数是需要返回的时间部分,如 YEAR 、MONTH 、 DAY 、 HOUR 、MINUTE 、SECOND 等。
在一般情况下,EXTRACT(unit FROM date) 与 unit() 的结果相同。
我们可以通过下面的实例来感受一下 EXTRACT() 函数 的用法。
使用 EXTRACT() 函数,从课程表 courses 中查询课程的名字和创建时间的小时数,并为 created_at 起别名为 created_hour 。
mysql> SELECT `name`, EXTRACT(HOUR FROM `created_at`) AS `created_hour`
FROM `courses`;
+-------------------------+--------------+
| name                    | created_hour |
+-------------------------+--------------+
| Advanced Algorithms     | 9            |
| System Design           | 10           |
| Django                  | 12           |
| Web                     | 13           |
| Big Data                | 16           |
| Artificial Intelligence | 18           |
| Java P6+                | 13           |
| Data Analysis           | 13           |
| Object Oriented Design  | 13           |
| Dynamic Programming     | 20           |
+-------------------------+--------------+
10 row in set
4、使用DATE_FORMAT()格式化输出日期
格式化输出日期
4.1DATE_FORMAT()用法
我们在 SQL 中使用 DATE_FORMAT() 方法来格式化输出 date/time。
需要注意的是 DATE_FORMAT() 函数返回的是字符串格式。
SELECT DATE_FORMAT(date,format);
其中
- date 是一个有效日期
 - format 是 date/time的输出格式
 
4.2DATE_FORMAT()实例
我们可以通过下面的实例来感受一下 DATE_FORMAT() 的用法。
假如我们要得到 courses 表课程创建时间的月份,日期,年份,星期。
我们可以使用下面的 SQL 语句:
SELECT DATE_FORMAT(`created_at`, '%Y %m ') AS `DATE_FORMAT`
FROM `courses`;
其中 %m 表示月份,%d 表示日期,%Y 表示年份,%w 表示星期。
mysql> SELECT DATE_FORMAT(`created_at`, '%Y %m') AS `DATE_FORMAT`
    -> FROM `courses`;
+-------------+
| DATE_FORMAT |
+-------------+
| 2020 06     |
| 2020 07     |
| 2020 02     |
| 2020 04     |
| 2020 09     |
| 2018 05     |
| 2019 01     |
| 2019 07     |
| 2020 08     |
| 2018 08     |
+-------------+
10 rows in set (0.01 sec)
请编写 SQL 语句,查询 courses 表,查询课程创建时间,按照 ’yyyy-MM-dd HH:mm:ss’ 的格式返回结果,返回列名显示为 DATE_FORMAT。
-- Write your SQL Query here --
-- example: SELECT * FROM XX_TABLE --
SELECT DATE_FORMAT(`created_at`,'%Y-%m-%d %H:%i:%s') as DATE_FORMAT FROM courses
常见的输出格式:

SQL函数——时间函数的更多相关文章
- SQL SERVER时间函数
		
本篇文章还是学习<程序员的SQL金典>内容的记录,此次将讲解的是SQL SERVER的时间函数. 本文只讲SQL SERVER支持的时间函数(其它数据库这里就不罗列了,想看更多的可以关注& ...
 - MS SQL Server 时间函数
		
日期和时间数据类型 数据类型 存储(字节) 日期范围 精确度 格式示例 DateTime 8 1753年1月1日 - 9999年12月31日 3 1/3毫秒 yyyy-MM-dd hh:mm:ss.n ...
 - SQL Server ->> 时间函数: EOMONTH, DATEFROMPARTS, TIMEFROMPARTS, DATETIMEFROMPARTS, DATETIMEOFFSETFROMPARTS
		
上面几个函数都是SQL Server 2012新增的时间函数. EOMONTH 返回传入时间的月结束日,返回数据类型为DATE SELECT EOMONTH(GETDATE()) 结果为 DATEFR ...
 - SQL日期时间函数
		
一.Sql Server中的日期与时间函数 1. 当前系统日期.时间 select getdate() 2. dateadd 在向指定日期加上一段时间的基础上,返回新的 datetime 值 例如 ...
 - mysql 函数 时间函数,数学函数,字符串函数,条件判断函数
		
=========================================== mysql 相关函数 ============================================= ...
 - CodeIgniter框架——函数(时间函数、装载函数)剖析+小知识点
		
连接数据库: 格式: mysql -h主机地址 -u用户名-p用户密码 数据库的提示符:mysql> 退出数据库: exit(回车) 知识点积累: 1.date_default_timezone ...
 - 2016/3/17  Mysq select    数学函数   字符串函数    时间函数  系统信息函数   加密函数
		
一,数学函数主要用于处理数字,包括整型.浮点数等. ABS(X) 返回x的绝对值 SELECT ABS(-1)--返回1 CEll(X),CEILING(x) 返回大于或等于x的最小整数 SELEC ...
 - php内置函数,时间函数,字符串函数
		
字符数----某一种编码下的一个文字 字节数----8位的0或1或者混合组成:显然字节占的空间大,显然一个字符至少占有一个字节,中文在utf-8至少占用3个也有可能4个字节 由上图可见,substr( ...
 - 数据库开发基础-SQl Server 聚合函数、数学函数、字符串函数、时间日期函数
		
SQL 拥有很多可用于计数和计算的内建函数. 函数的语法 内建 SQL 函数的语法是: SELECT function(列) FROM 表 函数的类型 在 SQL 中,基本的函数类型和种类有若干种.函 ...
 - SQL server 创建 修改表格 及表格基本增删改查 及 高级查询 及 (数学、字符串、日期时间)函数[转]
		
SQL server 创建 修改表格 及表格基本增删改查 及 高级查询 及 (数学.字符串.日期时间)函数 --创建表格 create table aa ( UserName varchar(50 ...
 
随机推荐
- Docker安装 配置
			
Docker的技术原理: 1. Linux 命名空间(Namespaces) 进程命名空间:使得每个容器拥有独立的进程空间,互相隔离,不受其他容器影响. 网络命名空间:提供独立的网络栈,每个容器有自己 ...
 - CSS3学习笔记-字体属性
			
在CSS3中,可以使用字体属性来控制网页中文本的样式和排版.以下是常用的字体属性: font-family 该属性用于指定网页中的文本所使用的字体.我们可以通过使用通用的字体名称,或者直接使用字体名称 ...
 - JVM学习-Class文件结构
			
文章原文:https://gaoyubo.cn/blogs/844dc0e7.html 一.Class类文件的结构 任何一个Class文件都对应着唯一的一个类或接口的定义信息. 但是反过来说,类或接口 ...
 - java中获取内网IP
			
package com.dashan.utils.iputils; import org.apache.commons.lang.StringUtils; import javax.servlet.h ...
 - Python 初学者必看:Python 异常处理集合
			
摘要:作为 Python 初学者,在刚学习 Python 编程时,经常会看到一些报错信息,本文专门介绍 python 异常处理. 异常 广义上的错误分为错误和异常 错误指的是可以人为避免 异常是指在语 ...
 - JPEG/Exif/TIFF格式解读(1):JEPG图片压缩与存储原理分析
			
JPEG文件简介 JPEG的全称是JointPhotographicExpertsGroup(联合图像专家小组),它是一种常用的图像存储格式, jpg/jpeg是24位的图像文件格式,也是一种高效率的 ...
 - 下一代 SCA:流水线成分分析
			
软件成分分析(SCA)是检测开源库等依赖项中漏洞的重要工具.随着现代应用程序的组成从以自定义代码为主的转变为高达70-90%的开源,管理来自第三方的依赖项的漏洞比以往任何时候的重要性都高出许多.然而现 ...
 - ByteHouse:基于ClickHouse的实时数仓能力升级解读
			
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 ByteHouse是火山引擎上的一款云原生数据仓库,为用户带来极速分析体验,能够支撑实时数据分析和海量数据离 ...
 - SpringBoot yml 小格子 变 小叶子
			
SpringBoot yml 小格子 变 小叶子 一般添加十多个模块后会出现这样的情况,正常情况下,看POM 文件里的 spring 引用是否异常 一般把 idea 关了再打开试试,有几次我是关了再开 ...
 - 愉快的了解Charles
			
charles是PC端常用的网络封包截取工具,在做移动开发时,我们为了调试与服务器端的网络通讯协议,常常需要截取网络封包来分析.除了在做移动开发中调式端口外,charles也可以用于分析第三方应用的通 ...