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函数——时间函数的更多相关文章

  1. SQL SERVER时间函数

    本篇文章还是学习<程序员的SQL金典>内容的记录,此次将讲解的是SQL SERVER的时间函数. 本文只讲SQL SERVER支持的时间函数(其它数据库这里就不罗列了,想看更多的可以关注& ...

  2. MS SQL Server 时间函数

    日期和时间数据类型 数据类型 存储(字节) 日期范围 精确度 格式示例 DateTime 8 1753年1月1日 - 9999年12月31日 3 1/3毫秒 yyyy-MM-dd hh:mm:ss.n ...

  3. SQL Server ->> 时间函数: EOMONTH, DATEFROMPARTS, TIMEFROMPARTS, DATETIMEFROMPARTS, DATETIMEOFFSETFROMPARTS

    上面几个函数都是SQL Server 2012新增的时间函数. EOMONTH 返回传入时间的月结束日,返回数据类型为DATE SELECT EOMONTH(GETDATE()) 结果为 DATEFR ...

  4. SQL日期时间函数

    一.Sql Server中的日期与时间函数 1. 当前系统日期.时间  select getdate() 2. dateadd 在向指定日期加上一段时间的基础上,返回新的 datetime 值  例如 ...

  5. mysql 函数 时间函数,数学函数,字符串函数,条件判断函数

    =========================================== mysql 相关函数 ============================================= ...

  6. CodeIgniter框架——函数(时间函数、装载函数)剖析+小知识点

    连接数据库: 格式: mysql -h主机地址 -u用户名-p用户密码 数据库的提示符:mysql> 退出数据库: exit(回车) 知识点积累: 1.date_default_timezone ...

  7. 2016/3/17 Mysq select 数学函数 字符串函数 时间函数 系统信息函数 加密函数

    一,数学函数主要用于处理数字,包括整型.浮点数等. ABS(X) 返回x的绝对值 SELECT ABS(-1)--返回1 CEll(X),CEILING(x)  返回大于或等于x的最小整数 SELEC ...

  8. php内置函数,时间函数,字符串函数

    字符数----某一种编码下的一个文字 字节数----8位的0或1或者混合组成:显然字节占的空间大,显然一个字符至少占有一个字节,中文在utf-8至少占用3个也有可能4个字节 由上图可见,substr( ...

  9. 数据库开发基础-SQl Server 聚合函数、数学函数、字符串函数、时间日期函数

    SQL 拥有很多可用于计数和计算的内建函数. 函数的语法 内建 SQL 函数的语法是: SELECT function(列) FROM 表 函数的类型 在 SQL 中,基本的函数类型和种类有若干种.函 ...

  10. SQL server 创建 修改表格 及表格基本增删改查 及 高级查询 及 (数学、字符串、日期时间)函数[转]

    SQL server 创建 修改表格 及表格基本增删改查 及 高级查询 及 (数学.字符串.日期时间)函数   --创建表格 create table aa ( UserName varchar(50 ...

随机推荐

  1. ElasticSearch之Clear cache API

    本方法用于清理缓存. 命令样例如下: curl -X POST "https://localhost:9200/testindex_001/_cache/clear?pretty" ...

  2. Python——第一章:if语法规则

    if语句的语法规则: ======第一种======        if 条件:            代码        如果条件成立就执行代码        如果不成立, 就不执行 案例1: mo ...

  3. Ubuntu系统部署后优化

    Ubuntu系统配置调整 前期准备 #更改主机名,重启后不变 hostnamectl set-hostname Zabbix-Server01 #更改主机名,重启后变回从前 hostname Zabb ...

  4. java桌面小闹钟

    写了个桌面的小闹钟,在运行环境可以编译,但是打包成jar文件,想用批处理命令直接调用报错"找不到或无法加载主类". 需求 为防止整天久坐,编写一个桌面闹钟.该闹钟功能很简单,一个小 ...

  5. Win10笔记本开启热点让手机上网

    Win10开启热点让手机上网,笔记本电脑开启热点,笔记本电脑开启WiFi,手机连接笔记本电脑热点上网. 1.前提条件:笔记本电脑网线联网,笔记本电脑支持热点 2.胆子要大,不怕公司网管统计发现你的电脑 ...

  6. [Python急救站]含义GUI的学生管理系统

    这个管理系统是含有GUI界面的学生管理系统,比较方便. import tkinter as tk class Student: def __init__(self, name, student_id, ...

  7. NebulaGraph实战:2-NebulaGraph手工和Python操作

      图数据库是专门存储庞大的图形网络并从中检索信息的数据库.它可以将图中的数据高效存储为点(Vertex)和边(Edge),还可以将属性(Property)附加到点和边上.本文以示例数据集basket ...

  8. KubeCon China 2023 | 拥抱开源,华为云原生华彩绽放

    本文分享自华为云社区<KubeCon China 2023 | 拥抱开源,华为云原生华彩绽放>,作者: 云容器大未来 . 2023 年度云原生全球旗舰盛会 KubeCon + CloudN ...

  9. Cassandra Gossip协议的二三事儿

    摘要:Gossip协议是Cassandra维护各节点状态的一个重要组件,下面我们以Gossip协议三次握手为线索逐步分析Gossip协议源码. Gossip协议是Cassandra维护各节点状态的一个 ...

  10. 拔掉电源会怎样?GaussDB(for Redis)双活让你有备无患

    摘要:GaussDB(for Redis)推出双活方案,助力全球化业务部署,为您的数据资产保驾护航! 本文分享自华为云社区<华为云GaussDB(for Redis)揭秘第22期:拔掉电源会怎样 ...