【MySQL】9. 内置函数

函数

1. 日期函数

在这里插入图片描述
获得年月日:

mysql> select current_date();
+----------------+
| current_date() |
+----------------+
| 2024-03-23     |
+----------------+
1 row in set (0.00 sec)

获得时分秒:

mysql> select current_time();
+----------------+
| current_time() |
+----------------+
| 12:35:51       |
+----------------+
1 row in set (0.00 sec)

获得时间戳:

mysql> select current_timestamp();
+---------------------+
| current_timestamp() |
+---------------------+
| 2024-03-23 12:36:36 |
+---------------------+
1 row in set (0.00 sec)

在日期的基础上加日期:

select date_add('2017-10-28', interval 10 day);
+-----------------------------------------+
| date_add('2017-10-28', interval 10 day) |
+-----------------------------------------+
|                              2017-11-07 |
+-----------------------------------------+

在日期的基础上减去时间:

select date_sub('2017-10-1', interval 2 day);
+---------------------------------------+
| date_sub('2017-10-1', interval 2 day) |
+---------------------------------------+
|                            2017-09-29 |
+---------------------------------------+

计算两个日期之间相差多少天:

select datediff('2017-10-10', '2016-9-1');
+------------------------------------+
| datediff('2017-10-10', '2016-9-1') |
+------------------------------------+
|                                404 |
+------------------------------------+

案例-1:
创建一张表,记录生日

create table tmp(
id int primary key auto_increment,
birthday date
);

添加当前日期:

insert into tmp(birthday) values(current_date());
mysql> select * from tmp;
+----+------------+
| id |  birthday  |
+----+------------+
| 1  | 2017-11-19 |
+----+------------+

案例-2:
创建一个留言表

mysql> create table msg (
id int primary key auto_increment,
content varchar(30) not null,
sendtime datetime
);

插入数据

mysql> insert into msg(content,sendtime) values('hello1', now());
mysql> insert into msg(content,sendtime) values('hello2', now());
mysql> select * from msg;
+----+---------+---------------------+
| id | content |            sendtime |
+----+---------+---------------------+
| 1  |  hello1 | 2017-11-19 14:12:20 |
| 2  |  hello2 | 2017-11-19 14:13:21 |
+----+---------+---------------------+

显示所有留言信息,发布日期只显示日期,不用显示时间

select content,date(sendtime) from msg;

请查询在2分钟内发布的帖子

select * from msg where date_add(sendtime, interval 2 minute) > now();
理解:
------------------------------|-----------|-------------|------------------初始时间       now()      初始时间+2min

2. 字符串函数

在这里插入图片描述
这里的学习需要用到:
之前的exam_result 表格
具体的数据请看这篇文章!
和 scott 数据库
在标题7的位置

案例:

mysql> select * from emp;
+--------+--------+-----------+------+---------------------+---------+---------+--------+
| empno  | ename  | job       | mgr  | hiredate            | sal     | comm    | deptno |
+--------+--------+-----------+------+---------------------+---------+---------+--------+
| 007369 | SMITH  | CLERK     | 7902 | 1980-12-17 00:00:00 |  800.00 |    NULL |     20 |
| 007499 | ALLEN  | SALESMAN  | 7698 | 1981-02-20 00:00:00 | 1600.00 |  300.00 |     30 |
| 007521 | WARD   | SALESMAN  | 7698 | 1981-02-22 00:00:00 | 1250.00 |  500.00 |     30 |
| 007566 | JONES  | MANAGER   | 7839 | 1981-04-02 00:00:00 | 2975.00 |    NULL |     20 |
| 007654 | MARTIN | SALESMAN  | 7698 | 1981-09-28 00:00:00 | 1250.00 | 1400.00 |     30 |
| 007698 | BLAKE  | MANAGER   | 7839 | 1981-05-01 00:00:00 | 2850.00 |    NULL |     30 |
| 007782 | CLARK  | MANAGER   | 7839 | 1981-06-09 00:00:00 | 2450.00 |    NULL |     10 |
| 007788 | SCOTT  | ANALYST   | 7566 | 1987-04-19 00:00:00 | 3000.00 |    NULL |     20 |
| 007839 | KING   | PRESIDENT | NULL | 1981-11-17 00:00:00 | 5000.00 |    NULL |     10 |
| 007844 | TURNER | SALESMAN  | 7698 | 1981-09-08 00:00:00 | 1500.00 |    0.00 |     30 |
| 007876 | ADAMS  | CLERK     | 7788 | 1987-05-23 00:00:00 | 1100.00 |    NULL |     20 |
| 007900 | JAMES  | CLERK     | 7698 | 1981-12-03 00:00:00 |  950.00 |    NULL |     30 |
| 007902 | FORD   | ANALYST   | 7566 | 1981-12-03 00:00:00 | 3000.00 |    NULL |     20 |
| 007934 | MILLER | CLERK     | 7782 | 1982-01-23 00:00:00 | 1300.00 |    NULL |     10 |
+--------+--------+-----------+------+---------------------+---------+---------+--------+
14 rows in set (0.00 sec)

获取emp表的ename列的字符集

mysql> select charset(ename) from emp;
+----------------+
| charset(ename) |
+----------------+
| utf8           |
| utf8           |
| utf8           |
| utf8           |
| utf8           |
| utf8           |
| utf8           |
| utf8           |
| utf8           |
| utf8           |
| utf8           |
| utf8           |
| utf8           |
| utf8           |
+----------------+
14 rows in set (0.00 sec)
mysql> select * from exam_result;
+----+----------+---------+------+---------+
| id | name     | chinese | math | english |
+----+----------+---------+------+---------+
|  1 | 唐三藏    |      67 |   98 |      56 |
|  2 | 孙悟空    |      87 |   78 |      77 |
|  3 | 猪悟能    |      88 |   98 |      90 |
|  4 | 曹孟德    |      82 |   84 |      67 |
|  5 | 刘玄德    |      55 |   85 |      45 |
|  6 | 孙权      |      70 |   73 |      78 |
|  7 | 宋公明    |      75 |   65 |      30 |
+----+----------+---------+------+---------+
7 rows in set (0.00 sec)

要求显示exam_result表中的信息,显示格式:“XXX的语文是XXX分,数学XXX分”

mysql> select concat(name, '的语文是',chinese,'分,数学是',math,'分') as '分数' from exam_result;
+------------------------------------------+
| 分数                                     |
+------------------------------------------+
| 唐三藏的语文是67分,数学是98|
| 孙悟空的语文是87分,数学是78|
| 猪悟能的语文是88分,数学是98|
| 曹孟德的语文是82分,数学是84|
| 刘玄德的语文是55分,数学是85|
| 孙权的语文是70分,数学是73|
| 宋公明的语文是75分,数学是65|
+------------------------------------------+

求学生表中学生姓名占用的字节数

mysql> select length(name), name from exam_result;
+--------------+----------+
| length(name) | name     |
+--------------+----------+
|            9 | 唐三藏    |
|            9 | 孙悟空    |
|            9 | 猪悟能    |
|            9 | 曹孟德    |
|            9 | 刘玄德    |
|            6 | 孙权      |
|            9 | 宋公明    |
+--------------+----------+
7 rows in set (0.00 sec)

注意:length函数返回字符串长度,以字节为单位。如果是多字节字符则计算多个字节数;
如果是单字节字符则算作一个字节。比如:字母,数字算作一个字节,中文表示多个字节数(与字符集编码有关)

将EMP表中所有名字中有S的替换成’上海’

mysql> select replace(ename, 'S', '上海') ,ename from emp;
+------------------------------+--------+
| replace(ename, 'S', '上海')   | ename  |
+------------------------------+--------+
| 上海MITH                      | SMITH  |
| ALLEN                         | ALLEN  |
| WARD                          | WARD   |
| JONE上海                      | JONES  |
| MARTIN                        | MARTIN |
| BLAKE                         | BLAKE  |
| CLARK                         | CLARK  |
| 上海COTT                      | SCOTT  |
| KING                          | KING   |
| TURNER                        | TURNER |
| ADAM上海                      | ADAMS  |
| JAME上海                      | JAMES  |
| FORD                          | FORD   |
| MILLER                        | MILLER |
+-------------------------------+--------+
14 rows in set (0.00 sec)

截取EMP表中ename字段的第二个到第三个字符

mysql> select substring(ename, 2, 2), ename from emp;
+------------------------+--------+
| substring(ename, 2, 2) | ename  |
+------------------------+--------+
| MI                     | SMITH  |
| LL                     | ALLEN  |
| AR                     | WARD   |
| ON                     | JONES  |
| AR                     | MARTIN |
| LA                     | BLAKE  |
| LA                     | CLARK  |
| CO                     | SCOTT  |
| IN                     | KING   |
| UR                     | TURNER |
| DA                     | ADAMS  |
| AM                     | JAMES  |
| OR                     | FORD   |
| IL                     | MILLER |
+------------------------+--------+
14 rows in set (0.00 sec)

以首字母小写的方式显示所有员工的姓名

mysql> select concat(lcase(substring(ename, 1, 1)),substring(ename,2)) from emp;
+----------------------------------------------------------+
| concat(lcase(substring(ename, 1, 1)),substring(ename,2)) |
+----------------------------------------------------------+
| sMITH                                                    |
| aLLEN                                                    |
| wARD                                                     |
| jONES                                                    |
| mARTIN                                                   |
| bLAKE                                                    |
| cLARK                                                    |
| sCOTT                                                    |
| kING                                                     |
| tURNER                                                   |
| aDAMS                                                    |
| jAMES                                                    |
| fORD                                                     |
| mILLER                                                   |
+----------------------------------------------------------+
14 rows in set (0.00 sec)

3. 数学函数

在这里插入图片描述
绝对值

mysql> select abs(-100.2);
+-------------+
| abs(-100.2) |
+-------------+
|       100.2 |
+-------------+
1 row in set (0.00 sec)

向上取整

mysql> select ceiling(23.04);
+----------------+
| ceiling(23.04) |
+----------------+
|             24 |
+----------------+
1 row in set (0.00 sec)

向下取整

mysql> select floor(23.7);
+-------------+
| floor(23.7) |
+-------------+
|          23 |
+-------------+
1 row in set (0.00 sec)

在这里插入图片描述

保留2位小数位数(小数四舍五入)

mysql> select format(12.3456, 2);
+--------------------+
| format(12.3456, 2) |
+--------------------+
| 12.35              |
+--------------------+
1 row in set (0.00 sec)

产生随机数

mysql> select rand();
+-------------------+
| rand()            |
+-------------------+
| 0.663455332315951 |
+-------------------+
1 row in set (0.00 sec)

4. 其它函数

user() 查询当前用户

mysql> select user();
+--------+
| user() |
+--------+
| root@  |
+--------+
1 row in set (0.00 sec)

md5(str)对一个字符串进行md5摘要,摘要后得到一个32位字符串

mysql> select md5('admin');
+----------------------------------+
| md5('admin')                     |
+----------------------------------+
| 21232f297a57a5a743894a0e4a801fc3 |
+----------------------------------+
1 row in set (0.00 sec)mysql> select md5(' ');
+----------------------------------+
| md5(' ')                         |
+----------------------------------+
| 7215ee9c7d9dc229d2921a40e899ec5f |
+----------------------------------+
1 row in set (0.00 sec)mysql> select md5('');
+----------------------------------+
| md5('')                          |
+----------------------------------+
| d41d8cd98f00b204e9800998ecf8427e |
+----------------------------------+
1 row in set (0.00 sec)

在MySQL当中所有的密码存储都是不可显的,防止用户的密码信息泄露
md5函数会将任意类型的字符串转为不规律的32位字符串

database()显示当前正在使用的数据库

mysql> select database();
+------------+
| database() |
+------------+
| scott      |
+------------+
1 row in set (0.00 sec)

password()函数,MySQL数据库使用该函数对用户加密

mysql> select password('root');
+-------------------------------------------+
| password('root')                          |
+-------------------------------------------+
| *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
+-------------------------------------------+
1 row in set, 1 warning (0.00 sec)

ifnull(val1, val2) 如果val1为null,返回val2,否则返回val1的值

mysql> select ifnull('abc', '123');
+----------------------+
| ifnull('abc', '123') |
+----------------------+
| abc                  |
+----------------------+
1 row in set (0.00 sec)mysql> select ifnull(null, '123');
+---------------------+
| ifnull(null, '123') |
+---------------------+
| 123                 |
+---------------------+
1 row in set (0.00 sec)

5. 实战OJ

SQL245 查找字符串中逗号出现的次数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/774094.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3+Pinia的使用 - 封装

目录: persist.ts 可存储到本地 import { PersistedStateOptions } from "pinia-plugin-persistedstate";/*** description pinia 持久化参数配置* param {String} key 存储到持久化的 name* param {Array} paths 需要持久化的 state name* return per…

基于人类反馈的强化学习:最核心的5个步骤

基于人类反馈的强化学习( Reinforcement Learning with Human Feedback)工作原理 强化学习正在彻底改变技术和商业世界中复杂问题的处理方式。这是一种强大的工具。通过该工具,机器能够从环境中学习并根据奖惩做出明智的决策。 但是&#x…

约克中央空调YES-will系列,舒适冷暖与高品质家居的优选

漫漫寒冬,室内一片寒意,开启空调多久才能享受到暖意?如果冬季气温较低,空调能否保持正常的制热运行? 炎炎夏季,即便在室内也同样是“暴汗”不断,身上黏糊糊,什么样的家用中央空调才能快速制冷,让全家人感受到舒适,同时又能避免传统空调直吹带来的一系列问题? 遇上梅雨季节…

面试题 之 webpack

1.说说你对webpack理解?解决什么问题? Webpack 是实现前端项目的模块化,用于现代 JavaScript 应用程序的静态模块打包工具,被webpack 直接引用的资源打包进 bunde.js的资源,当webpack 处理应用程序时,它会在内部构建一…

迁移android studio 模拟器位置

android studio 初始位置是安装在c盘,若是要迁移需 1创建一个目标位置如我的F:/avd 2在系统环境变量里面设置新的地址 变量名:ANDROID_SDK_HOME 变量值:F:/avd 3最重要的是文件复制,将C盘里面avd的上层目录.android的目录整体…

【哈希专题】【蓝桥杯备考训练】:星空之夜、模拟散列表、字符串哈希、四平方和、扫雷【已更新完成】

目录 1、星空之夜(usaco training 5.1) 2、模拟散列表(模板) 3、字符串哈希(模板) 4、四平方和(第七届蓝桥杯省赛C A组/B组 & JAVA B组/C组) 5、扫雷(Google Ki…

2024室内设计和建筑必须知道的十大3D渲染趋势!

2023年对建筑圈是非常不平凡的一年,高清视频渲染、元宇宙全覆盖、AI模型大爆发.....不断发展的 3D 数字技术世界正迅速重塑建筑设计行业。 2024年,室内设计和建筑设计领域在3D渲染方面又将迎来怎样的变革?以下十大3D渲染趋势,你不…

五、Elasticsearch 集成

目录 5.1 Spring Data 框架集成5.1.1 Spring Data 框架介绍5.1.2 Spring Data Elasticsearch 介绍5.1.3 Spring Data Elasticsearch 版本对比5.1.4 集成步骤 5.1 Spring Data 框架集成 5.1.1 Spring Data 框架介绍 Spring Data 是一个用于简化数据库开发的开源框架。其主要目…

【JVM】JVM简介

文章目录 🌴简介🌲JVM发展史🌸Sun Classic VM🌸Exact VM🌸HotSpot VM🌸JRockit🌸J9 JVMTaobao JVM(国产研发) 🌳JVM 运行流程⭕总结 🌴简介 JVM …

c语言中动态内存管理

说到内存,大家一定都知道。但是有一种函数可以实现动态内存管理,下面大家一起学习。 文章目录 一、为什么要有动态内存管理?二、malloc 和 free1.malloc2.free 三、calloc 和 realloc1.calloc2.realloc3.常见的动态内存的错误3.1对NULL指针的…

c++ 有名对象和匿名对象

c 有名对象和匿名对象 有名对象就是有名字的对象&#xff0c;匿名对象就是没有名字的对象。 #define _CRT_SECURE_NO_WARNINGS 1 using namespace std; #include<iostream> class score { public:score(){math 100;chinese 100;english 100;}score(int _math, int _…

Java Web-Tomcat

Web服务器 Web服务器是一个软件程序,对HTTP协议的操作进行封装,使得程序员不必直接对协议进行操作,让Web开发更加便捷。主要功能是“提供网上信息浏览服务”。 Tomcat&#xff0c;是一个 HTTP 服务器。我们只需要在服务器中安装一个Web服务器如Tomcat&#xff0c;然后就可以将…

数据安全之路:Databend 用户策略指南

在 Databend 中&#xff0c;我们致力于保护用户的数据安全。除了身份认证之外&#xff0c;我们还提供了多种访问策略&#xff0c;包括网络策略&#xff08;Network Policy&#xff09;、密码策略&#xff08;Password Policy&#xff09;和数据脱敏策略&#xff08;Masking Pol…

JavaScript进阶5之垃圾回收(计算机组成、解释与编译、JavaScript引擎、垃圾回收、内存管理)、运行机制(浏览器进程分类、浏览器事件循环)

垃圾回收&运行机制 垃圾回收计算机组成解释与编译JavaScript引擎V8引擎 垃圾回收引用计数法标记清除&#xff08;mark-sweep&#xff09;算法 内存管理新生代 运行机制浏览器进程分类&#xff1a;浏览器事件循环宏任务微任务整体流程浏览器事件循环案例一案例二 垃圾回收 …

Unity学习日记 11.单词识别游戏

目录 1.返回鼠标单击对象的名字 2.鼠标拖动移动对象 3.实现鼠标跟随 4.场景准备工作 5.判断图片与框配对 6.根据配对结果放置图片 1.返回鼠标单击对象的名字 步骤&#xff1a; 创建一个ShowName的脚本&#xff0c;并挂载在摄像机上 RaycastHit2D hitInfo;void Update(){…

CANalyzer使用_04 使用CAN报文发送数据

本文手把手介绍使用CAN来发送数据。分为创建工程&#xff0c;创建CAN报文&#xff0c;运行效果&#xff0c;参考文献。 1 创建工程 双击“CANalyzer->单击“I accept”->等一会等软件打开后&#xff0c;单击“File”->单击"New"->双击"CAN 500kBa…

vue3+ts+element home页面侧边栏+头部组件+路由组件组合页面教程

文章目录 效果展示template代码script代码样式代码 效果展示 template代码 <template><el-container class"home"><el-aside class"flex" :style"{ width: asideDisplay ? 70px : 290px }"><div class"aside-left&q…

json文件美化工具(json tools)

自动整理json文件&#xff0c;使用&#xff1a;ctrlaltM

【数学】第十三届蓝桥杯省赛C++ A组/研究生组 Python A组/研究生组《数的拆分》(C++)

【题目描述】 给定 T 个正整数 &#xff0c;分别问每个 能否表示为 的形式&#xff0c;其中 , 为正整数&#xff0c;, 为大于等于 2 的正整数。 【输入格式】 输入第一行包含一个整数 T 表示询问次数。 接下来 T 行&#xff0c;每行包含一个正整数 。 【输出格式】 对于…

浅析JS原型链

目录 实例对象原型对象对象原型短暂总结一下constructor原型链 何为原型链呢&#xff1f; 就是实例对象和原型对象之间的链接,每一个对象都有原型,原型本身又是对象,原型又有原型,以此类推形成一个链式结构.称为原型链。 这里又扯到了另外两个概念了。 实例对象>>&g…