ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MySQL中的单行函数

2022-01-24 21:31:05  阅读:133  来源: 互联网

标签:salary RAND 函数 WHEN 单行 MySQL SELECT


目录

不同DBMS函数的差异

我们在使用 SQL 语言的时候,不是直接和这门语言打交道,而是通过它使用不同的数据库软件,即DBMS。DBMS 之间的差异性很大,远大于同一个语言不同版本之间的差异实际上,只有很少的函数是被 DBMS 同时支持的。比如,大多数 DBMS 使用(||)或者(+)来做拼接符,而在 MySQL 中的字符串拼接函数为concat()。大部分 DBMS 会有自己特定的函数,这就意味着采用 SQL 函数的代码可移植性是很差的,因此在使用函数的时候需要特别注意。

MySQL的内置函数及分类

MySQL提供了丰富的内置函数,这些函数使得数据的维护与管理更加方便,能够更好地提供数据的分析与统计功能,在一定程度上提高了开发人员进行数据分析与统计的效率。

MySQL提供的内置函数从 实现的功能角度 可以分为数值函数、字符串函数、日期和时间函数、流程控制函数、加密与解密函数、获取MySQL信息函数、聚合函数等。

这里,我将这些丰富的内置函数再分为两类:

  • 单行函数
  • 聚合函数(或分组函数)

在这里插入图片描述
单行函数的特点:

  • 操作数据对象
  • 接受参数返回一个结果
  • 只对一行进行变换
  • 每行返回一个结果
  • 可以嵌套
  • 参数可以是一列或一个值

数值函数

基本函数

在这里插入图片描述
注意:
①RAND(x):
这个函数只要里面的种子值x是一样的,那么它生成的随机数就是一样的。
例:

#取随机数
SELECT RAND(),RAND(),RAND(10),RAND(10),RAND(-1),RAND(-1)
FROM DUAL;

结果:
在这里插入图片描述
②TRUNCATE(x,y),ROUND(x,y)
这两个函数的y也可以取负值,代表小数点前几位
例如:

SELECT TRUNCATE(125,-1),ROUND(125,-1)
FROM DUAL;

结果:
在这里插入图片描述

角度与弧度互换函数

在这里插入图片描述

三角函数

在这里插入图片描述

指数与对数

在这里插入图片描述

进制间的转换

在这里插入图片描述

字符串函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

注意点:
①CHAR_LENGTH(),LENGTH()
前者为字符长度,后者为字节长度与字符集有关。
例如:

SELECT CHAR_LENGTH('hello'),CHAR_LENGTH('我们'),
LENGTH('hello'),LENGTH('我们')
FROM DUAL;

结果:
在这里插入图片描述
说明‘我们’这两个汉字在底层都是使用三个字节存储的(UTF-8)。

②LPAD(str, len, pad),RPAD(str ,len, pad)
可以实现左右对齐
例如:
右对齐:

# LPAD:实现右对齐效果
# RPAD:实现左对齐效果
SELECT employee_id,last_name,LPAD(salary,8,' ')
FROM employees;

结果:
在这里插入图片描述

流程控制函数

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

在这里插入图片描述
例如:
①IF(VALUE,VALUE1,VALUE2)

SELECT last_name,salary,IF(salary >= 6000,'高工资','低工资') "details"
FROM employees;

在这里插入图片描述
②IFNULL(VALUE1,VALUE2):看做是IF(VALUE,VALUE1,VALUE2)的特殊情况

SELECT last_name,commission_pct,IFNULL(commission_pct,0) "details"
FROM employees;

在这里插入图片描述
③CASE WHEN … THEN …WHEN … THEN … ELSE … END
ELSE可以省略,类似于java的if … else if … else if … else

SELECT last_name,salary,CASE WHEN salary >= 15000 THEN '白骨精' 
			     WHEN salary >= 10000 THEN '潜力股'
			     WHEN salary >= 8000 THEN '小屌丝'
			     ELSE '草根' END "details",department_id
FROM employees;

在这里插入图片描述

SELECT last_name,salary,CASE WHEN salary >= 15000 THEN '白骨精' 
			     WHEN salary >= 10000 THEN '潜力股'
			     WHEN salary >= 8000 THEN '小屌丝'
			     END "details"
FROM employees;

在这里插入图片描述
④CASE … WHEN … THEN … WHEN … THEN … ELSE … END
类似于java的swich … case…

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;

在这里插入图片描述
注:可以看到如上有顺序结构,分支结构,但是没有循环结构。这是因为MySQL在运行时相当于自带了一个循环结构。开头的时候我们就说过MySQL中的函数只对一行进行变换,而结果有这么多行,相当于是内部有一个循环把每一行都放进函数中去运行。

标签:salary,RAND,函数,WHEN,单行,MySQL,SELECT
来源: https://blog.csdn.net/zyb18507175502/article/details/122662892

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有