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 ...
随机推荐
- .Net中的AutoScrollPosition问题 (panel 滚动条的位置设定)
本文转自:http://www.cnblogs.com/h2appy/archive/2008/04/23/1167400.html 有Panel类型的窗体panel1,其AutoScroll设为了T ...
- jenkins删除构建历史并重置构建序号
系统管理 工具和动作-->脚本命令执行 删除之前,现在已经构建了156次 输入脚本 println(Jenkins.instance.getJobNames()) //查看获取任务名列表//要 ...
- 冲刺秋招之牛客刷Java记录第二天
第一题 下列代码输入什么? public class Test { public static Test t1 = new Test(); { System.out.println("blo ...
- IIS通过ARR实现负载均衡
一.实现整体方式介绍 项目中部署在windows服务器上的项目,需要部署负载均衡,本来想用nginx来配置的,奈何iis上有几个项目,把80端口和443端口占用了,nginx就用不了了(因为通过域名访 ...
- 微信小程序数组
常用函数 concat(): 连接两个或多个数组,返回连接后的新数组. 示例:const arr1 = [1, 2, 3]; const arr2 = [4, 5, 6]; const arr3 = ...
- 保姆级教程:带你体验华为云测试计划CodeArts TestPlan
摘要:华为云测试计划(CodeArts TestPlan)是面向软件开发者提供的一站式云端测试平台,覆盖测试管理.接口测试,融入DevOps敏捷测试理念,帮助您高效管理测试活动,保障产品高质量交付. ...
- 华为云自研PB级分布式时序数据库揭秘第一期:初识GaussDB(for Influx)
摘要:GaussDB(for Influx)提供了独特的数据存储管理解决方案,云原生的存储与计算架构,可根据业务变化快速扩容缩容:高效的数据压缩能力和数据冷热分离设计,可大幅降低数据存储成本:高吞吐的 ...
- 近数据处理(NDP)——GaussDB(for MySQL)性能提升的秘密
摘要:云堆栈的深度集成是释放云数据库力量的关键,华为云在实现这一目标方面处于领先地位,正如GaussDB(for MySQL)所证明的那样. 本文分享自华为云社区<近数据处理(NDP),为Gau ...
- java并发编程(2):Java多线程-java.util.concurrent高级工具
高级多线程控制类 Java1.5提供了一个非常高效实用的多线程包:java.util.concurrent, 提供了大量高级工具,可以帮助开发者编写高效.易维护.结构清晰的Java多线程程序. Thr ...
- maven中引入CDH依赖包,Cannot resolve org.apache.hadoop:hadoop-hdfs:3.0.0-cdh6.3.2
POM文件加入仓库 cloudera https://repository.cloudera.com/artifactory/cloudera-repos/ 修改MAVEN配置文件 nexus-ali ...