我在广州学 Mysql 系列——有关 Mysql 函数的练习
ℹ️大家好,我是LXJ,通过Mysql各种函数的相关学习,本文将通过一些练习来巩固Mysql的函数~~
明天就冬至啦,提前大家冬至快乐!!“差不多冬至,一早一晚还是有雨”~
复习:👉《Mysql函数的介绍和使用方式》
同时,数据库相关内容查看专栏👉【数据库专栏】~
了解更多内容请点击我的主页 “【练小杰的CSDN】”
文章目录
- 前言
- 使用数学函数`RAND()`生成3个10以内的随机整数
- 使用`SIN(),COS(),TAN(),COT()`函数计算三角函数值,并将计算结果转换成整数值
- 创建表,并使用字符串和日期函数,对字段值进行操作
- 创建表lxj
- 插入一条记录
- 返回m_FN的长度,返回第1条记录中人的全名,将m_info字段值转换成小写字母,将m_info的值反向输出
- 计算第一条记录中人的年龄,并计算m_birth字段中的值在那一年中的位置,按照“January 1st, 2001”格式输出时间值
- 插入一条新的记录,m_FN值为“蒙奇·D”,m_LN值为“路飞”,m_birth值为系统当前时间,m_info为空。使用LAST_INSERT_ID()查看最后插入的ID值
- 使用CASE进行条件判断
- 利用STRCMP函数比较字符串大小
- 使用FIND_IN_SET()函数返回子字符串在字符串列表中的位置
- SHOW PROCESSLIST命令输出当前用户的连接信息
- PASSWORD函数加密密码
- CONVERT()函数改变字符串的默认字符集
- 使用CAST和CONVERT函数进行数据类型的转换
前言
本文的目的是通过mysql相关函数的练习,使用各种函数操作数据,掌握各种函数的作用和使用方法。
温馨提醒:要先了解👉《mysql函数介绍和使用方式》
以下命令都是在【MySQL在线运行】在线网站运行测试的~~
使用数学函数RAND()
生成3个10以内的随机整数
-
RAND()
函数生成的随机数在0~1 之间,要生成0~10之间的随机数,RAND()
需要乘以10,如果要求是整数,则还必须舍去结果的小数部分。 -
在这里使用
ROUND()
函数,结果如下:
SELECT ROUND(RAND() * 10), ROUND(RAND() * 10), ROUND(RAND() * 10);
+----------------------------+-------------------------------+----------------------------+
| ROUND(RAND() * 10) | ROUND(RAND() * 10) | ROUND(RAND() * 10) |
+----------------------------+-------------------------------+----------------------------+
| 2 | 6 | 5 |
+----------------------------+--------------------------------+----------------------------+
1 row in set (0.01 sec)
使用SIN(),COS(),TAN(),COT()
函数计算三角函数值,并将计算结果转换成整数值
-
MySQL中三角函数计算出来的值并不一定是整数值,需要使用数学函数将其转换为整数,可以使用的数学函数有ROUND(),FLOOR() 等。
-
结果如下:
SELECT PI(), sin(PI()/2),cos(PI()), ROUND(tan(PI()/4)), FLOOR(cot(PI()/4));
+-----------+-------------+-----------+-------------------------+--------------------------+
| PI() | sin(PI()/2) | cos(PI()) | ROUND(tan(PI()/4)) | FLOOR(cot(PI()/4)) |
+-----------+-------------+-----------+-------------------------+--------------------------+
| 3.141593 | 1 | -1 | 1 | 1 |
+-----------+-------------+-----------+-------------------------+--------------------------+
创建表,并使用字符串和日期函数,对字段值进行操作
- 操作内容:
- 创建表lxj ,其中包含3个字段,分别为
AUTO_INCREMENT
约束的m_id字段,VARCHAR
类型的m_FN字段,VARCHAR
类型的m_LN字段,DATETIME
类型的m_birth字段和VARCHAR
类型的m_info字段。- 插入一条记录,m_id值为默认,m_FN值为“Xiaojie”,m_LN值为“Lian”,m_birth值为2001-01-01,m_info值为“GoodMan”。
- 返回m_FN的长度,返回第一条记录中的人的全名,将m_info字段值转换成小写字母。将m_info的值反向输出。
- 计算第一条记录中人的年龄,并计算m_birth字段中的值在那一年中的位置,按照“ Monday 1st January 2001 ”格式输出时间值。
- 插入一条新的记录,m_FN值为“蒙奇·D”,m_LN值为“路飞”,m_birth值为系统当前时间,m_info为空。使用
LAST_INSERT_ID()
查看最后插入的ID值。
创建表lxj
- 执行结果如下
CREATE TABLE lxj
(
m_id INT AUTO_INCREMENT PRIMARY KEY,
m_FN VARCHAR(100),
m_LN VARCHAR(100),
m_birth DATETIME,
m_info VARCHAR(255) NULL
);
Query OK, 0 rows affected (0.01 sec)
插入一条记录
- 输入语句如下
INSERT INTO lxj VALUES (NULL, 'Xiaojie', 'Lian', '2001-01-01', 'GoodMan');
- 使用
SELECT
语句查看插入结果
SELECT * FROM lxj;
+------+----------+--------+-------------------------+--------------+
| m_id | m_FN | m_LN | m_birth | m_info |
+------+----------+--------+-------------------------+--------------+
| 1 | Xiaojie | Lian | 2001-01-01 00:00:00 | GoodMan |
+------+----------+--------+-------------------------+--------------+
1 row in set (0.00 sec)
返回m_FN的长度,返回第1条记录中人的全名,将m_info字段值转换成小写字母,将m_info的值反向输出
SELECT LENGTH(m_FN), CONCAT(m_FN, m_LN), LOWER(m_info), REVERSE(m_info) FROM lxj;
执行结果如下:
SELECT LENGTH(m_FN), CONCAT(m_FN, m_LN), LOWER(m_info), REVERSE(m_info) FROM lxj;
+--------------+--------------------+---------------+-----------------+
| LENGTH(m_FN) | CONCAT(m_FN, m_LN) | LOWER(m_info) | REVERSE(m_info) |
+--------------+--------------------+---------------+-----------------+
| 7 | XiaojieLian | goodman | naMdooG |
+--------------+--------------------+---------------+-----------------+
计算第一条记录中人的年龄,并计算m_birth字段中的值在那一年中的位置,按照“January 1st, 2001”格式输出时间值
SELECT YEAR(CURDATE())-YEAR(m_birth) AS age, DAYOFYEAR(m_birth) AS days, DATE_FORMAT(m_birth, '%W %D %M %Y') AS birthDate FROM lxj;
语句执行结果如下:
SELECT YEAR(CURDATE())-YEAR(m_birth) AS age,
DAYOFYEAR(m_birth) AS days,
DATE_FORMAT(m_birth, '%W %D %M %Y') AS birthDate
FROM lxj;
+------+------+-------------------------+
| age | days | birthDate |
+------+------+-------------------------+
| 23 | 1 | Monday 1st January 2001 |
+------+------+-------------------------+
插入一条新的记录,m_FN值为“蒙奇·D”,m_LN值为“路飞”,m_birth值为系统当前时间,m_info为空。使用LAST_INSERT_ID()查看最后插入的ID值
INSERT INTO lxj VALUES (NULL, '蒙奇·D', '路飞', NOW(),NULL);
结果如下:
INSERT INTO lxj VALUES (NULL, 'Samuel', 'Green', NOW(),NULL);
Query OK, 1 row affected (0.00 sec)
使用SELECT语句查看插入结果:
SELECT * FROM lxj;
+------+-----------+--------+---------------------+---------+
| m_id | m_FN | m_LN | m_birth | m_info |
+------+-----------+--------+---------------------+---------+
| 1 | Xiaojie | Lian | 2001-01-01 00:00:00 | GoodMan |
| 2 | 蒙奇·D | 路飞 | 2024-12-20 18:39:09 | NULL |
+------+-----------+--------+---------------------+---------+
可以看到,表中现在有两条记录,接下来使用
LAST_INSERT_ID()
函数查看最后插入的ID值
- 查询结果如下:
SELECT LAST_INSERT_ID();
+--------------------------+
| LAST_INSERT_ID() |
+--------------------------+
| 2 |
+--------------------------+
1 row in set (0.00 sec)
最后插入的为第二条记录,其ID值为2,因此返回值为2
使用CASE进行条件判断
如果m_birth小于2000年,显示“old”;如果m_birth大于2000年,则显示“young”
- 查询语句如下:
SELECT m_birth, CASE WHEN YEAR(m_birth) < 2000 THEN 'old'
WHEN YEAR(m_birth) 2000 THEN 'young'
ELSE 'not born'
END AS status FROM lxj;
运行结果:
+-------------------------+---------+
| m_birth | status |
+-------------------------+---------+
| 2001-01-01 00:00:00 | young |
| 2024-12-20 18:50:09 | young |
+-------------------------+----------+
2 rows in set (0.00 sec)
利用STRCMP函数比较字符串大小
- 执行命令语句
SELECT STRCMP('txt', 'txt2'),STRCMP('txt2', 'txt'), STRCMP('lxj', 'txt');
- 查询结果
+-----------------------+-----------------------+----------------------+
| STRCMP('txt', 'txt2') | STRCMP('txt2', 'txt') | STRCMP('lxj', 'txt') |
+-----------------------+-----------------------+----------------------+
| -1 | 1 | -1 |
+-----------------------+-----------------------+----------------------+
使用FIND_IN_SET()函数返回子字符串在字符串列表中的位置
- 执行命令语句
SELECT FIELD('Hi', 'lxj', 'Hey', 'Hi', 'bas') as col1,
FIELD('Hi', 'Hey', 'Lo', 'Hilo', 'foo') as col2;
- 查询结果
+------+------+
| col1 | col2 |
+------+------+
| 3 | 0 |
+------+------+
SHOW PROCESSLIST命令输出当前用户的连接信息
- 执行命令
SHOW PROCESSLIST;
- 查询结果
+----+------+-----------+------+---------+------+----------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+-----------+------+---------+------+----------+------------------+
| 4 | root | localhost | test | Query | 0 | starting | SHOW PROCESSLIST |
+----+------+-----------+------+---------+------+----------+------------------+
PASSWORD函数加密密码
- 执行命令
SELECT PASSWORD('123456');
- 查询结果
+-------------------------------------------+
| PASSWORD('123456') |
+-------------------------------------------+
| *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+-------------------------------------------+
CONVERT()函数改变字符串的默认字符集
- 输入语句如下
SELECT CHARSET('string'), CHARSET(CONVERT('string' USING latin1));
- 运行结果
+-------------------+-----------------------------------------+
| CHARSET('string') | CHARSET(CONVERT('string' USING latin1)) |
+-------------------+-----------------------------------------+
| utf8 | latin1 |
+-------------------+-----------------------------------------+
使用CAST和CONVERT函数进行数据类型的转换
- 输入语句如下
SELECT CAST(100 AS CHAR(2)), CONVERT('2024-12-20 18:12:12',TIME);
- 运行结果
CAST 函数将整数 100 转换为 CHAR(2) 类型,而且 CHAR(2) 表示一个长度为 2 个字符串,只保留前两个字符,即 “10”
CONVERT 函数将一个日期时间字符串 ‘2024-12-20 18:12:12’ 转换为 TIME 类型,返回结果是一个时间值 18:12:12
+----------------------+-------------------------------------+
| CAST(100 AS CHAR(2)) | CONVERT('2024-12-20 18:12:12',TIME) |
+----------------------+-------------------------------------+
| 10 | 18:12:12 |
+----------------------+-------------------------------------+
本文有关mysql函数的练习题部分已经总结完,冬至快乐啦,下周见!!!
😆想要了解更多内容请点击“练小杰的CSDN”
ℹ️欢迎各位在评论区踊跃讨论,积极提出问题,解决困惑!!!