MySQL_07:单行函数

news2025/2/24 9:24:24

文章目录

      • 一、函数的基本理解
        • 1.函数的理解
          • 1.1内置函数的基本理解
          • 1.2不同DBMS函数的差异
          • 1.3MySQL的内置函数的分类
        • 2.图解多行函数和单行函数
      • 二、单行函数
        • 1.数值函数
          • 1.1基本函数
          • 1.2角度与弧度互换函数
          • 1.3三角函数
          • 1.4指数与对数
          • 1.5进制间转换
        • 2.字符串函数
        • 3.日期和时间函数
          • 3.1获取日期时间(基础必知)
          • 3.2日期与时间戳的转换
          • 3.3获取月份、星期、星期数、天数等函数
          • 3.4日期的操作函数
          • 3.5时间和秒针转换的函数
          • 3.6计算日期和时间的函数
          • 3.7日期的格式化与解析
        • 4.流程控制函数
          • 4.1SQL语句举例
        • 5.加密与解密函数(了解)
        • 6.MySQL信息函数
        • 7. 其他函数

一、函数的基本理解

1.函数的理解

1.1内置函数的基本理解
  • 定义:从函数定义的角度出发,我们可以将函数分成 内置函数 和 自定义函数 。在 SQL 语言中,同样也包括了 内置函数和自定义函数。内置函数是系统内置的通用函数,而自定义函数是我们根据自己的需要编写的,下面记录的是内置函数的笔记
  • 作用:它可以把我们经常使用的代码封装起来, 需要的时候直接调用即可。这样既提高了代码效率 ,又提高了可维护性 。在 SQL 中我们也可以使用函数对检索出来的数据进行函数操作。使用这些函数,可以极大地提高用户对数据库的管理效率
1.2不同DBMS函数的差异
  • 我们在使用 SQL 语言的时候,不是直接和这门语言打交道,而是通过它使用不同的数据库软件,即DBMS(dbms一般指数据库管理系统)。DBMS 之间的差异性很大,远大于同一个语言不同版本之间的差异。实际上,只有很少的函数是 被 DBMS 同时支持的。比如,大多数 DBMS 使用(||)或者(+)来做拼接符,而在 MySQL 中的字符串拼 接函数为concat()。大部分 DBMS 会有自己特定的函数,这就意味着采用 SQL 函数的代码可移植性是很 差的,因此在使用函数的时候需要特别注意
1.3MySQL的内置函数的分类
  • MySQL提供了丰富的内置函数,这些函数使得数据的维护与管理更加方便,能够更好地提供数据的分析 与统计功能,在一定程度上提高了开发人员进行数据分析与统计的效率
  • MySQL提供的内置函数从 实现的功能角度 可以分为数值函数、字符串函数、日期和时间函数、流程控制 函数、加密与解密函数、获取MySQL信息函数、聚合函数等。这里,内置函数再分为两类: 单行函数聚合函数(或分组函数)

2.图解多行函数和单行函数

在这里插入图片描述

  • 单行函数
    • 操作数据对象
    • 接受参数返回一个结果
    • 只对一行进行变换
    • 每行返回一个结果
    • 可以嵌套
    • 参数可以是一列或一个值
  • 聚合函数:聚合(或聚集、分组)函数,它是对一组数据进行汇总的函数,输入的是一组数据的集合,输出的是单个值

二、单行函数

1.数值函数

1.1基本函数

在这里插入图片描述

sql语句测试:

# ABS(X):返回x的绝对值
SELECT ABS(-1.6),ABS(2)
FROM DUAL;

# SIGN(X):返回x的符号,正数返回1,负数返货-1,0返回0
SELECT SIGN(23),SIGN(6.4),SIGN(-2),SIGN(0)
FROM DUAL;

# PI():圆周率
SELECT PI()
FROM DUAL;

# CEIL(X)、CEILING(x):返回大于或者等于x的最小整数
SELECT CEIL(4.5),CEIL(3.5),CEILING(4.5),CEILING(3.5)
FROM DUAL;

# FLOOR(x):返回小于或者等于x的最大整数
SELECT FLOOR(4.5),FLOOR(3.5)
FROM DUAL;

# LEAST(value1,value2,...):求最小值
SELECT LEAST(1,3,4,5,6,7,8,232,32323,2323)
FROM DUAL;

# GREATEST(value1,value2,...):求最大值
SELECT GREATEST(23,42,5534,32,231,13)
FROM DUAL;

# MOD(x,y):求x除以y的余数
SELECT MOD(6,5)
FROM DUAL;

# RAND()、RAND(x) :返回0~1的随机值,如果x相同,则返回的随机值相同
SELECT RAND(1),RAND(2),RAND(1),RAND()
FROM DUAL;

# ROUND(X):返回x的四舍五入
SELECT ROUND(6.789)
FROM DUAL;

# ROUND(x,y):返回x小数点后y位的四舍五入的值
SELECT ROUND(5.7892,2)
FROM DUAL;

# TRUNCATE(x,y):返回数字x后保留y位小数的值
SELECT TRUNCATE(4.56543,3)
FROM DUAL;

# SQRT(X):求x的平方根,如果x为负数则返回null
SELECT SQRT(16),SQRT(-45),SQRT(9)
FROM DUAL;

1.2角度与弧度互换函数

在这里插入图片描述

sql语句测试:

# 角度与弧度互换
# RADIANS(X):角度转换为弧度,x为角度值
SELECT RADIANS(30),RADIANS(45),RADIANS(60),RADIANS(90)
FROM DUAL;

# DEGREES(X):弧度转换为角度,x为弧度值
SELECT DEGREES(2*PI())
FROM DUAL;

1.3三角函数

(参数中的x均为弧度值)

在这里插入图片描述

sql语句测试:

(这里简单举例数学常用的sin、cos、tan)

# 三角函数
# SIN(X)
SELECT SIN(RADIANS(30));
# COS(X)
SELECT COS(RADIANS(30));
# TAN(X)
SELECT TAN(RADIANS(30));

1.4指数与对数

在这里插入图片描述

sql语句测试:

#指数和对数
#POW(X,Y):x的y次方
SELECT POW(2,3);
# EXP(X):返回常熟e的x次方
SELECT EXP(4);
# LN(X)、LOG(X):返回以e为底x的对数,当x小于等于0时返回null
SELECT LN(3),LOG(3);
# LOG10(X):返回以10为底x的对数,当x小于等于0时返回null
SELECT LOG10(3);
# LOG2(X):返回以2为底的x的对数,当x小于等于0时,返回null
SELECT LOG2(3);

1.5进制间转换

在这里插入图片描述

sql语句测试:

# 进制间的转换(其中的x均为10进制)
# BIN(x) HEX(x) OCT(x) CONV(x,from_base,to_base)
SELECT BIN(10),HEX(10),OCT(10),CONV(10,2,8)
FROM DUAL;

2.字符串函数

注意:MySQL中,字符串的位置是从1开始的

在这里插入图片描述

在这里插入图片描述

个别函数举例

  • CONCAT(s1,s2,…,sn) :连接s1,s2,…,sn为一个字符串
# CONCAT(s1,s2,......,sn) 使用举例
SELECT CONCAT(e1.last_name,'的老板是',e2.last_name) 员工的对应上司
FROM employees e1,employees e2
WHERE e1.manager_id=e2.employee_id;

在这里插入图片描述

  • CONCAT_WS(x, s1,s2,…,sn):同CONCAT(s1,s2,…)函数,但是每个字符串之间要加上x
# CONCAT(s1,s2,......,sn) 使用举例
SELECT CONCAT_WS('__',e1.last_name,'的老板是',e2.last_name) 员工的对应上司
FROM employees e1,employees e2
WHERE e1.manager_id=e2.employee_id;

在这里插入图片描述

  • INSERT(str, idx, len, replacestr):将字符串str从第idx位置开始,len个字符长的子串替换为字符串replacestr

    (特别说明:MySQL中字符串的位置是从1开始的)

# INSERT(str, idx, len, replacestr):将字符串str从第idx位置开始,len个字符长的子串替换为字符串replacestr
SELECT INSERT('abcdefg',1,3,'a');

在这里插入图片描述

3.日期和时间函数

3.1获取日期时间(基础必知)

在这里插入图片描述

SQL语句测试

SELECT CURDATE(),CURRENT_DATE(),CURTIME(),CURRENT_TIME(),NOW(),UTC_DATE(),UTC_TIME();

在这里插入图片描述

3.2日期与时间戳的转换

在这里插入图片描述

3.3获取月份、星期、星期数、天数等函数

在这里插入图片描述

SQL语句测试:

SELECT YEAR(CURDATE()),MONTH(CURDATE()),DAY(CURDATE()),
HOUR(CURTIME()),MINUTE(NOW()),SECOND(SYSDATE())
FROM DUAL;

在这里插入图片描述

SELECT MONTHNAME('2021-10-26'),DAYNAME('2021-10-26'),WEEKDAY('2021-10-26'),
QUARTER(CURDATE()),WEEK(CURDATE()),DAYOFYEAR(NOW()),
DAYOFMONTH(NOW()),DAYOFWEEK(NOW())
FROM DUAL;

在这里插入图片描述

3.4日期的操作函数
  • EXTRACT(type FROM date) :返回指定日期中特定的部分,type指定返回的值

  • EXTRACT(type FROM date)函数中type的取值与含义:

在这里插入图片描述

sql语句举例

SELECT EXTRACT(day FROM NOW()),EXTRACT(SECOND FROM NOW())
3.5时间和秒针转换的函数

在这里插入图片描述

SQL语句测试:

SELECT TIME_TO_SEC(CURTIME()),SEC_TO_TIME(38989)
3.6计算日期和时间的函数
  • 第一部分

在这里插入图片描述

上述函数中type的取值

在这里插入图片描述

SQL语句测试:

SELECT DATE_ADD(NOW(), INTERVAL 1 DAY) AS col1,DATE_ADD('2021-10-21 23:32:12',INTERVAL
1 SECOND) AS col2,
ADDDATE('2021-10-21 23:32:12',INTERVAL 1 SECOND) AS col3,
DATE_ADD('2021-10-21 23:32:12',INTERVAL '1_1' MINUTE_SECOND) AS col4,
DATE_ADD(NOW(), INTERVAL -1 YEAR) AS col5, #可以是负数
DATE_ADD(NOW(), INTERVAL '1_1' YEAR_MONTH) AS col6 #需要单引号
FROM DUAL;
  • 第二部分

在这里插入图片描述

sql语句测试

SELECT
ADDTIME(NOW(),20),SUBTIME(NOW(),30),SUBTIME(NOW(),'1:1:3'),DATEDIFF(NOW(),'2021-10-
01'),
TIMEDIFF(NOW(),'2021-10-25 22:10:10'),FROM_DAYS(366),TO_DAYS('0000-12-25'),
LAST_DAY(NOW()),MAKEDATE(YEAR(NOW()),12),MAKETIME(10,21,23),PERIOD_ADD(20200101010101,
10)
FRO DUAL;
3.7日期的格式化与解析

在这里插入图片描述

上述 非GET_FORMAT 函数中fmt参数常用的格式符:

在这里插入图片描述

GET_FORMAT函数中date_type和format_type参数取值如下:

在这里插入图片描述


  • 格式化:日期—>字符串
# 格式化
SELECT DATE_FORMAT(CURDATE(),'%Y-%M-%D'),DATE_FORMAT(NOW(),'%y-%m-%d')
# 显示当前时间
SELECT DATE_FORMAT(NOW(), '%H:%i:%s');

在这里插入图片描述

  • 解析:字符串—>日期

注解:这里的逆过程需要和格式化当时的格式一一匹配

# 格式化的逆过程解析的简单举例
SELECT STR_TO_DATE('22-11-23','%y-%m-%d')

  • GET_FORMAT:返回日期字符串的显示格式,这里的format_type参数多代表一些国家
SELECT GET_FORMAT(DATE, 'USA')

在这里插入图片描述

  • GET_FORMAT和DATE_FORMAT的巧用
SELECT DATE_FORMAT(CURDATE(),GET_FORMAT(DATE, 'USA'))

在这里插入图片描述

4.流程控制函数

  • 流程处理函数可以根据不同的条件,执行不同的处理流程,可以在SQL语句中实现不同的条件选择。 MySQL中的流程处理函数主要包括IF()、IFNULL()和CASE()函数。

在这里插入图片描述

4.1SQL语句举例
  • IF(value,value1,value2)
SELECT last_name,salary,if(salary>=6000,'高工资','低工资')
FROM employees;

在这里插入图片描述

SELECT last_name,commission_pct,IF(commission_pct IS NOT NULL,commission_pct,0)
FROM employees;

在这里插入图片描述

  • IFNULL(value1, value2)
# IFNULL(expr1,expr2):可以看作是if的特殊情况,只能判断null的情况
SELECT last_name,commission_pct,IFNULL(commission_pct,0) datails
FROM employees;
  • CASE WHEN 条件1 THEN 结果1 WHEN 条件2 THEN 结果2… [ELSE resultn] END(相当于Java的if…else if…else…)
# CASE WHEN... THEN... WHEN... THEN...WHEN... THEN...
SELECT last_name,salary,CASE 
WHEN salary>=15000 THEN '高薪'
WHEN salary>=10000 THEN '潜力股'
WHEN salary>=8000 THEN '白领'
ELSE '草根'
END
FROM employees;

在这里插入图片描述

  • CASE expr WHEN 常量值1 THEN 值1 WHEN 常量值1 THEN值1 … [ELSE 值n] END(相当于Java的switch…case…)

练习题1:

# CASE WHEN... THEN... WHEN... THEN...WHEN... THEN...
-- 练习1:查询部门号为 10,20, 30 。。。的员工信息, 
-- 若部门号为 10, 则打印其工资的 1.1 倍, 
-- 20 号部门, 则打印其 工资的 1.2 倍, 
-- 30 号部门打印其工资的 1.3 倍数,
-- 其他部门,打印其工资的1.4倍
SELECT employee_id,last_name,department_id,salary,CASE department_id WHEN 10 THEN salary * 1.1
                                                                     WHEN 20 THEN salary * 1.2
                                                                     WHEN 30 THEN salary * 1.3
                                                                     ELSE salary * 1.4 END 'details'
FROM employees;

练习题2:

# CASE WHEN... THEN... WHEN... THEN...WHEN... THEN...
-- 练习2:查询部门号为 10,20, 30 的员工信息, 
-- 若部门号为 10, 则打印其工资的 1.1 倍, 
-- 20 号部门, 则打印其 工资的 1.2 倍, 
-- 30 号部门打印其工资的 1.3 倍数,
SELECT employee_id,last_name,department_id,salary,CASE department_id WHEN 10 THEN salary * 1.1
                                                                     WHEN 20 THEN salary * 1.2
                                                                     WHEN 30 THEN salary * 1.3
                                                                     END 'details'
FROM employees
WHERE department_id IN(10,20,30);

5.加密与解密函数(了解)

  • 加密与解密函数主要用于对数据库中的数据进行加密和解密处理,以防止数据被他人窃取。这些函数在保证数据库安全时非常有用

在这里插入图片描述

注:可以看到,ENCODE(value,password_seed)函数与DECODE(value,password_seed)函数互为反函数

注意:MySQL8.0弃用password函数和ENCODE和DECODE

(md5解密)

6.MySQL信息函数

  • MySQL中内置了一些可以查询MySQL信息的函数,这些函数主要用于帮助数据库开发或运维人员更好地 对数据库进行维护工作

在这里插入图片描述

7. 其他函数

  • MySQL中有些函数无法对其进行具体的分类,但是这些函数在MySQL的开发和运维过程中也是不容忽视的

在这里插入图片描述

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

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

相关文章

python常用操作之使用多个界定符(分隔符)分割字符串

本系列文章会总结python中各种常见及常用的内置方法、对不同数据结构的操作,参考书籍《python cookbook》第三版 分割字符串单个界定符分割字符串代码演示多个界定符分割字符串代码演示注意总结在日常学习及工作中,不论是在解析数据还是在产出输出&#…

【LeetCode】No.98. Validate Binary Search Tree -- Java Version

题目链接:https://leetcode.com/problems/validate-binary-search-tree/ 1. 题目介绍(Validate Binary Search Tree) Given the root of a binary tree, determine if it is a valid binary search tree (BST). 【Translate】: 给…

Qt 堆栈窗体QStackedWidget使用

QStackedWidget控件相当于一个容器,提供一个空间来存放一系列的控件,并且每次只能有一个控件是可见的,即被设置为当前的控件。QStackedWidget可用于创建类似于QTabWidget提供的用户界面。 它是一个构建在QStackedLayout类之上的方便布局小部件…

dolphinscheduler 2.0.6 负载均衡源码

目录🐬官网介绍🐬负载均衡🐠加权随机(random)🐠平滑轮询(roundrobin)🐠线性负载(lowerweight)🐵其它🐬官网介绍 官网资料&…

【计算机网络】网络层:虚拟专用网

由于IP地址的紧缺,一个机构能够申请到的IP地址数往往远小于本机构拥有的主机数。 如果一个机构内部的计算机通信也采用TCP/IP协议,那么这些仅字机构内部使用的计算机就可以由本机构自行分配其IP地址。 本地地址(专用地址,互联网对…

Java培训教程给bean的属性赋值

依赖注入的方式 1. 通过bean的setXxx()方法赋值 Hello World中使用的就是这种方式 2. 通过bean的构造器赋值 Spring自动匹配合适的构造器<bean id“book” class“com.atguigu.spring.bean.Book” > <constructor-arg value “10010”/> …

有位p8终于把珍藏多年的算法视频给分享出来了,总共3.81G

大厂面试都开始问算法了&#xff0c;要是你不会算法只能与大厂失之交臂。为了解决大家算法方面的缺失&#xff0c;小编特此分享算法的学习路线和学习视频&#xff0c;希望大家能够喜欢&#xff01;&#xff01;&#xff01; 左神算法-KMP算法及其扩展 左神算法-Morris遍历及其…

S2B2C供应链系统将引领商业模式!S2B2C供应链电商系统实现订单管理数智化

近年来随着5G、人工智能、区块链、大数据、物联网等技术的快速发展&#xff0c;带动了数字经济的升级发展&#xff0c;疫情的不断反复更是加速推动了数字经济新发展&#xff0c;产业数字化和数字产业化进程加快&#xff0c;促进了各行各业快速发展&#xff0c;S2B2C供应链系统模…

17【redux】

17 【redux】 引言 我们现在开始学习了 Redux &#xff0c;在我们之前写的案例当中&#xff0c;我们对于状态的管理&#xff0c;都是通过 state 来实现的&#xff0c;比如&#xff0c;我们在给兄弟组件传递数据时&#xff0c;需要先将数据传递给父组件&#xff0c;再由父组件…

[附源码]Python计算机毕业设计大学生志愿者管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

软件工程经济学期末复习

1、利润 收入-成本费用 2、资产 流动资产非流动资产 3、显性成本可以用货币计量&#xff0c;是可以在会计的帐目上反映出来的 4、领取什么保险应缴纳个人所得税 商业保险 某企业一项固定资产的原价为800 0000元&#xff0c;预计使用年限为6年&#xff0c;预计净残值为5 0…

软件测试linux面试相关的知识

一、常用的命令 ls&#xff08;查看目录下的内容&#xff0c;-a显示隐藏目录&#xff09; cd&#xff08;进入某个目录&#xff0c;cd .. 返回上一层目录&#xff0c;cd - 返回上一次的目录&#xff0c;cd / 返回根目录&#xff09; pwd&#xff08;显示当前绝对路径&#x…

阿里云易立:以增效促降本,容器服务全面进入智能化时代

容器技术已经跨越鸿沟&#xff0c;广泛应用于金融、通讯、制造、交通等千行百业。Kubernetes支撑的工作负载也从早期单一的互联网应用发展到数据库、AI、大数据等等&#xff0c;并覆盖了公共云、专有云、边缘云等多样化、动态的云环境。 11月5日&#xff0c;2022杭州 云栖大会…

在Windows7在部署Hadoop+Hbase

0. 准备工作 0.1 电脑上现在没有jdk 0.1 提前准备好文件 1. 现在开始安装jdk 1.8.0_60 安装成功&#xff0c;没啥问题 小疑问&#xff1a;自动配置好了环境变量? 1.1 小记 在安装jdk的时候&#xff0c;有三种小工具&#xff0c;可以根据需要选择性安装 JDKjre源代码 虽…

牛客网语法篇练习基础语法(二)

1.牛牛正在给他的朋友们买电影票&#xff0c;已知一张电影票价是100元&#xff0c;计算 x 位朋友的总票价是多少&#xff1f; x int(input()) a x*100 print(a) 2.给定两个整数a和b (0 < a,b < 10,000)&#xff0c;计算a除以b的整数商和余数。 a,b map(int,input().…

【深入浅出Java并发编程指南】「剖析篇」Fork/Join框架的实战开发和原理探究指南

前提概述 Java 7开始引入了一种新的Fork/Join线程池&#xff0c;它可以执行一种特殊的任务&#xff1a;把一个大任务拆成多个小任务并行执行。 我们举个例子&#xff1a;如果要计算一个超大数组的和&#xff0c;最简单的做法是用一个循环在一个线程内完成&#xff1a; 算法原理…

使用Typora+EasyBlogImageForTypora写博客,无图床快速上传图片

Typora下载 Typora以前都是免费的&#xff0c;自去年开始竟然要收费&#x1f914;&#xff08;不过也能理解&#xff0c;毕竟真心好用&#x1f60a;&#xff09;&#xff0c;在这里给大家提供的是免费的版本&#xff08;免安装&#xff0c;下载即可使用&#xff09;&#xff0…

【密码学篇】(商密)密码算法分析理论知识

【密码学篇】&#xff08;商密&#xff09;密码算法分析理论知识 密码算法分析理论—【蘇小沐】 文章目录【密码学篇】&#xff08;商密&#xff09;密码算法分析理论知识&#xff08;一&#xff09;密码系统安全性1.实际安全性2.无条件安全性&#xff08;二&#xff09;密码算…

干货丨如何开启TiDB集群中的节点通信加密?

笔者在一个银行项目中&#xff0c;费尽千辛万苦&#xff0c;好不容易通过PoC测试。 就当一切就绪&#xff0c;准备正式上线时&#xff0c;突然传来了噩耗&#xff1a;未通过银行内部的漏洞扫描&#xff0c;发现存在高危漏洞&#xff0c;需要马上进行修复。 这可给我吓坏了&am…

Vue-axios的get、post请求

直接在控制台上打印axios会报错&#xff0c;打印fetch就不会&#xff1b; 因为fetch是标准&#xff0c;axios是第三方&#xff0c;要想用axios&#xff0c;就必须引入想应的js文件&#xff1b;axios-js文件下载&#xff1a;npm 搜索axios&#xff0c;点进去&#xff0c;往下找&…