学习MySQL的第五天

宝剑锋从磨砺出,梅花香自苦寒来。 

函数

1.1 什么是函数

       我们将一些代码进行封装,并在需要他们的时候随时进行调用,这就叫做函数,与Python、C中的函数的定义基本相同,同时函数能极大的提高效率和降低代码的复杂程度

1.2 函数的分类

       (1)从函数定义的角度出发可以定义为内置函数和自定义函数

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

       (3)内置函数还可以根据行数,再分为两类: 单行函数 和 多行函数

       (4)单行函数:每行返回一个结果,只对一行进行变换,可以进行嵌套

       不过需要注意的是:不同的DBMS函数之间的差别很大,有些语法格式是不通用的
比如: 在MySQL中语句的连接操作需要用 CONCAT(str1,str2,...),在oracle中则不然

SELECT CONCAT('hello',' ','world')
FROM DUAL

 

       1.2.1 数值函数

              常用的数值函数有以下几个:

              (1)ABS(X): 求X的绝对值 ;(2)SIGN(X): 查询X数值符号;正数返回'1',负数返回'-1',0返回0
              (3)PI(): 就是Π(3.1415926……)  ;(4)CEIL():  向上取整  

              (5)CEILING():  向上取整  ;(6)FLOOR(): 向下取整 ; (7) MOD(): 取余函数

SELECT ABS(-123),ABS(32),sign(-23),SIGN(23),PI(),CEIL(32.32)
FROM DUAL;
SELECT CEILING(-43.255),FLOOR(32.32),FLOOR(-43.23),MOD(12,4)
FROM DUAL;

       1.2.2 随机函数

             用RAND(X)函数来随机生成一个在0~1之间的伪随机数,X称为因子,可以为空,当因字数相同时,两个RAND(X)的伪随机数值相同,可以通过四则运算来动态控制随机数的大小

SELECT RAND(),FLOOR(RAND()*10),RAND(1),RAND(-1),RAND(1)
FROM DUAL;

       1.2.3 四舍五入和截断函数

             ROUND(X)函数默认情况是舍弃小数位,完成四舍五入
             而ROUND(X,Y)函数中 Y 表示保留小数点后第Y位,Y若为负数则为小数点前第几位,从而实现在指定位置的四舍五入
             截断函数是通过 TRUNCATE(X,D) 函数实现,直接舍弃 D 位置之后的数值,不包含D,D在小数点后第一位为 1 ,在小数点起第一位为 -1

# 包含 Y 超出情况
SELECT ROUND(123.494),ROUND(123.494,4),ROUND(123.520,-4)
FROM DUAL;
SELECT ROUND(123.494,4),ROUND(123.494,2),ROUND(123.520,-1)
FROM DUAL;
SELECT ROUND(123.494,4),ROUND(123.520,-4)
FROM DUAL;

# 截断 TRUNCATE(X,D)
SELECT TRUNCATE(123.456,1)
FROM DUAL;

       1.2.4 单行函数嵌套操作

             函数通常是可以进行函数嵌套的,一般的顺序为先完成内部函数的计算,再完成外部函数的计算,就比如:

# 单行函数嵌套操作
SELECT FLOOR(RAND()*10)
FROM DUAL;

       1.2.5 角度与弧度之间的换算函数

             RADIANS(X)函数可以实现将角度转化为弧度,而DEGREES(X)函数可以实现将弧度转化为角度

# PI()/3: Π/3
SELECT RADIANS(1),DEGREES(PI()/3)
FROM DUAL;

       1.2.6 三角函数

           (1) SIN(X): x 应该为弧度值,返回x的正弦值
           (2)ASIN(x): 返回x的反正弦值,即获取正弦为x的值,如果x的值不在-1到1之间,则返回NULL
           (3)COS(x): 返回x的余弦值,其中x为弧度值
           (4)ACOS(x): 返回x的反余弦值,即获取余弦为x的值。如果x的值不在-1到1之间,则返回NULL
           (5)TAN(x): 返回x的正切值,其中X为弧度值
           (6)ATAN(X): 返回x的反正切值,即返回正切值为x的值
           (7)ATAN2(Y,X): 返回两个参数的反正切值
           (8)COT(x): 返回x的余切值,其中x为弧度值

             对于三角函数,想必大家中学阶段都已经学习过很多次,在这就不过多进行赘述了,这里的三角函数的实现方法与数学中的实现方法相同

       1.2.7 指数和对数函数

             一般的指数函数:POW(X,Y) 即 X的Y次方 ;

             e的n次方型函数则为:EXP(X) 即 e的X次方

             对数函数则用 ln()函数 和 LOG(B,X) 函数,这个与数学中的取对数思想同样相同

# POW(X,Y):X的Y次方 
# EXP(X):X为e的X次方
SELECT POW(2,5),POW(2,4),EXP(2)
FROM DUAL;
# ln()函数 LOG(B,X) 函数
SELECT LN(EXP(10)),LOG(10,100)
FROM DUAL;

       1.2.8 进制间的转换函数       

             进制之间的转化通常为二进制、八进制、十六进制之间的转换
           (1)BIN(X): 查看X的二进制
           (2)HEX(X): 转为16进制
           (3)OCT(X): 转化为8进制
           (4)CONV(N,from_base,to_base): from_base表示N的进制,to_base表示要转化成的进制;用它可以实现将任意进制的数转换为其它任意进制

SELECT BIN(10),HEX(10),OCT(10),CONV(10,2,8)
FROM DUAL;

 

       1.2.9 字符串函数

             1、ASCII(S) 返回S第一个字符的ascll码
             2、CHAR_LENGTH(str): 返回字节的长度

# 1.ASCII(S) 返回S第一个字符的ascll码
SELECT ASCII('afbf')
FROM DUAL;

# 2.CHAR_LENGTH(str): 字节的长度
SELECT CHAR_LENGTH('w我们'),CHAR_LENGTH('我们')
FROM DUAL;

 

             3、LENGTH(str): 字节的长度
             需要注意的是,在测量汉字时,LENGTH(str)与CHAR_LENGTH(str)返回的字节长度是不同的,前者一个汉字按照占用三个字节长度来返回,后者则是将一个汉字看作一个字符,返回一个字节长度

SELECT LENGTH('们'),LENGTH('www'),CHAR_LENGTH("中国")
FROM DUAL;

             4、CONCAT(str1,str2,...): 连接,例:XXX work for yyy

SELECT CONCAT(t1.`name`,' worked for ',t2.`name`) `雇佣关系`
FROM employees t1, employees t2
WHERE t1.top_id = t2.id;
CONCAT(str1,str2,...)
CONCAT_WS(separator,str1,str2,...)

             5、CONCAT_WS(separator,str1,str2,...): 表示用separator来对str1,str2……进行连接

SELECT CONCAT_WS(' ','I','Love','China')
FROM DUAL;

             6、INSERT(str,pos,len,newstr): 将str第pos位(字符串首位为1),到(len+pos-1)位 的字符替换为 newstr

             7、REPLACE(str,from_str,to_str): 将 str 中的某些连续字符串替换为 to_str

# 6.INSERT(str,pos,len,newstr)
SELECT INSERT('01234',2,3,'world')
FROM DUAL

# 7.REPLACE(str,from_str,to_str)
SELECT REPLACE('hello','ll','aaa')
FROM DUAL

 

             8、LOWER(str) 函数 和 UPPER(str) 函数

             LOWER(str) :将字符串 str 中的所有字符转换为小写
             UPPER(str):将字符串 str 中的所有字符转换为大写

             因为MySQL对大小写的区分非常的不严谨,就不过多解释了

             9、LEFT(str,len) 和 RIGHT(str,len) 函数

             函数的功能就是取出字符串最左侧或最右侧长度为len的字符

SELECT LEFT('hellow',2), RIGHT('world',3)
FROM DUAL;

 

             10、LPAD(str,len,padstr) 与 RPAD(str,len,padstr)

             这两个函数就像是一对冤家,总是朝着相反的方向做事

             LPAD(str,len,padstr):用padstr来对str进行左补齐,使其长度等于len
             RPAD(str,len,padstr):用padstr来对str进行右对齐,使其长度等于len

SELECT `name`,id,LPAD(id,3,'*'),RPAD(id,4,'-')
FROM employees

             12、LTRIM(str) 与 RTRIM(str)
             LTRIM(str): 去除字符串左侧的空格
             RTRIM(str): 去除字符串右侧的空格

             13、TRIM(str1 FROM str2)

             TRIM(str1 FROM str2):去除str2首尾处的str1

SELECT TRIM('oo' FROM 'ooheollo'),TRIM('o' FROM 'ooheollo')
FROM DUAL;

             补充若干衍生函数,但是不做具体的案例解释了
             TRIM([{BOTH | LEADING | TRAILING} [removed_char] FROM] str)
             BOTH:删除开头和结尾的字符(默认选项)
             LEADING:仅删除开头的字符
             TRAILING:仅删除结尾的字符
             removed_char:要删除的字符(默认为空格)
             str:目标字符串

             14、其余函数

             (1)REPEAT(str,count):重复count次str
             (2)space(n): 返回n个空格
             (3)STRCMP(str1,str2): 比较str1和str2的大小

SELECT REPEAT('hello',4),SPACE(5),STRCMP("a","abggg")
FROM DUAL

              (4)SUBSTR(str,pos,len) ,SUBSTR(str FROM pos FOR len)
              (5)LOCATE(substr,str): 返回是否存在字符str在substr中

SELECT SUBSTR('asdfghjkl',2,2),LOCATE('acff','c')
FROM DUAL;

              (6)ELT(): 返回指定位置的字符串
              (7)FIELD(str,str1,str2,str3,...): 找到str在后面字符串中首次出现的位置
              (8)FIND_IN_SET(str,strlist): 查找str首次出现的位置,不存在返回0

SELECT ELT(2,'a','b','v','t'),FIELD('str','str1','str2','str3','str','uuu'),
FIND_IN_SET('str','fdf,fff,ddd,dd,,str,cc,f,,g,,'),
FIND_IN_SET('st','fdf,fff,ddd,dd,,str,cc,f,,g,,')
FROM DUAL;

              (9)REVERSE(str): 反转字符串
              (10) NULLIF(expr1,expr2): 如果expr1与expr2相同,则返回NULL,否则返回expr1

SELECT REVERSE('asssdddddfffgg')
FROM DUAL;
SELECT id,NULLIF(LENGTH(salary),LENGTH(`name`))
FROM employees;

 

结语

       今天的学习到这里就结束了,明天这一时刻,继续关注我哦
       如果你的精神内耗很重,我的建议是不要让自己停下来,因为我也经常性的内耗,所以我发现,如果我每天的生活都很充实、忙碌,那么我就没有时间去内耗了;如果你复习备考的期间累了,那么不妨出去跑一跑,给自己来一个十公里的洗礼,你的心境应该会有所不同吧

       截取了人民日报的一段话,分享给正在备考的你,祝愿你以后《一路生花》!

       放弃很容易,但坚持却很酷。接下来的日子,请继续做最酷的自己!

           须知少日拏云志,曾许人间第一流。我们还年轻,我们还有无限可能!

              

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力奋斗的小杨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值