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 ...
随机推荐
- 从零玩转Activiti7工作流-2021-09-12-16-22-07
title: 从零玩转Activiti7工作流 date: 2021-09-12 16:22:08.51 updated: 2021-12-26 17:43:12.171 url: https://w ...
- Pikachu漏洞靶场 File Inclusion(文件包含漏洞)
File Inclusion(文件包含漏洞) 本地文件包含 url: 192.168.171.30/pikachu/vul/fileinclude/fi_local.php?filename=file ...
- zabbix_agent配置文件
agent常用参数 : [root@jqebsdb zabbix]# cat zabbix_agentd.conf | grep -v ^$ | grep -v ^# PidFile=/var/ru ...
- 文心一言 VS 讯飞星火 VS chatgpt (61)-- 算法导论6.4 5题
文心一言 VS 讯飞星火 VS chatgpt (61)-- 算法导论6.4 5题 五.证明:在所有元素都不同的情况下,HEAPSORT 的时间复杂度是 Ω (nlgn). 文心一言: 要证明在所有元 ...
- PLG SaaS 案例:如何实践外链自动增长策略?
首先任何的商业逻辑,光流量增长,没法变现是没用的. 就像博客群发提效工具,得有对应的用户,更得有对应付费用户群体的画像.剩下的就是靠增长,被动让他们找到你的产品,用产品解决他们痛点,他们自然而然会付费 ...
- Prometheus配置Basic Auth进行安全防护,实现登录控制
本文分享自华为云社区<Prometheus配置Basic Auth进行安全防护,实现登录控制>,作者:可以交个朋友. 一.Prometheus Basic Auth 使用背景 在日常pro ...
- 实践案例丨CenterNet-Hourglass论文复现
摘要:本案例是CenterNet-Hourglass论文复现的体验案例,此模型是对Objects as Points 中提出的CenterNet进行结果复现. 本文分享自华为云社区<Center ...
- 复杂查询so easy ,GaussDB(for Cassandra)推Lucene引擎全新解决方案
摘要:复杂查询so easy!GaussDB(for Cassandra)新特性来袭. 本文分享自华为云社区<来了!GaussDB(for Cassandra)新特性亮相>,作者:Gaus ...
- 第三方测评:GaussDB(for Redis)稳定性与扩容表现
摘要:本文将通过采用Redis Labs推出的多线程压测工具memtier_benchmark对比测试下GaussDB(for Redis) 和原生Redis的特性差异 本文分享自华为云社区<墨 ...
- 超90万个K8S实例可被发现暴露在公网上,14%位于中国
翻译: SEAL安全 原标题: Over 900,000 Kubernetes instances found exposed online 原文链接: https://www.bleepingcom ...