Oracle函数与高级查询
二 Oracle的函数
2.1 什么是函数
函数:指对一堆逻辑的打包,能够支持传入的参数,根据参数得到一定的结果;
那么,在oracle中,都有什么函数,有什么类型的函数,函数有什么分类?
2.2 函数的分类
2.2.1 单行与多行
除了聚合(组)函数,其它全是单行函数
Oracle的函数咱们可以简单分成再种:多行函数与单行函数,如下图:
2.2.1.1 什么是单行函数
简单理解:对单行数据进行是操作,得到单行数据 ; 比如concat连接函数
concat 连接函数得到的效果; 使用concat 不会影响行数,以前100行,使用concat之后得到的结果也是100行。
单行函数 :在执行获得结果后。可以支持传入参数【列和表达式】,针对每一行单独做运算。最终不会影响结果的行数。
单行函数特点:
1接收参数返回一个值
2对每一行返回行起作用
3每一行返回一个结果
4可以修改数据类型
5可以使用嵌套 concat(concat(col1,col2),col2)
除了concat 这样的单行函数以外,还有其他的单行函数,比如字符处理函数;
比如有时要求用户名全部大写或者小写,或者需要得到一个人的姓,这些都需要字符函数进行处理,字符函数中,也存在分类
2.2.1.2 什么是多行函数
多行函数:简单理解对多行数据进行操作,最后返回一个数据
比如count函数:
Count 针对过滤后的结果 支持传入表的列名或者常量,对所有行的记录统一处理。最终只会得到一个结果,会影响结果行数;
多行函数 : 在执行获得结果后。可以支持传入参数【列和表达式】,针对每一行整体统计做运算。最终只会产生1行数据
咱们所说的单行与多行是指这个函数操作的数据是单行还是多行(不是说的结果)
2.2.1.3 单行、多行分别用在哪?
扩展理解与练习 |
比如concat 用在哪里? 可以放在select 后,把它的姓和名连接起来; 单行函数: select 关键字之后 where 之后的条件上 (where 之后单行函数 如下) 姓名中有e或者a的员工? 把姓名组合起来查询 select * from employees where first_name || last_name like '%e%' or first_name || last_name like '%a%' 使用函数 Select * from employees Where concat(first_name,last_name) like ‘%e%’ Or first_name || last_name like ‘%a%’; |
多行函数: 针对Select 关键之后 ;比如count函数 统计所有行 ,放在select之后 使用多行函数 得到就一个结果,那我放在where 后面 有意义吗? Where 是针对每一行, 而多行函数 返回结果只有一行,如果放在where 之后,执行一次,是一个结果,执行二次还是同一个结果,所以没有意义. |
2.2.2 函数功能分类
可以分为:字符函数、数字函数,转换函数,日期函数,组函数,其它函数
字符(串)函数:拼接字符串,截取字符串,全变大写,全变小写,首字母大写...
数字(number)函数:四舍五入,舍掉
转换函数:字符《--》日期 字符《--》数字
日期函数:拿到年,月,日,时,分,秒
组函数:sum,
其它函数:
2.3 字符函数
字符函数分为大小写转换函数与字符处理函数
2.3.1 大小写转换函数
大小写转换函数: Lower(列|表达式) 全部转换小写 Upper(列|表达式) 全部转换大写 Initcap(列|表达式) 首字母大写 |
练习案例: |
select 'Hello world' from dual; |
大写:select upper('Hello world') from dual; |
小写:select lower('Hello world') from dual; |
练习案例: |
1,查询first_name为randall的员工工资; |
分析:我们查询的时候不需要关心名称中的大小写问题 |
select * from employees where lower(first_name) ='randall'; |
练习案例: |
2,客户在输入名字的时候,可以不会在意名称的大小写,比如,Wang Xiaoer,假设现在在发送邮件,需要按照正规的格式输出姓名;请使用SQL处理 |
分析:我们可以插入一条小写的名字,然后使用首字母大写查询出来,格式更完整 |
insert into employees (employee_id,first_name,last_name,email,phone_number,hire_date,job_id) values (300,'wang','xiaoer','xxx@qq','1895236541',sysdate,'SH_CLERK') |
查询: select initcap(first_name)||' '||initcap(last_name) from employees; |
sql中round函数怎么使用2.3.2 字符处理函数
1、CONCAT(strexp, strexp): 连接两个字符串 2、Substr(str,start_index,length) :从指定的位置截取指定长度的字符串 3、LENGTH(strexp):返回字符串的长度 LENGTHB(strexp):返回字节的长度 4、LPAD( string1, padded_length, [ pad_string ] ) 在列的左边粘贴字符 其中string1是需要粘贴字符的字符串 * padded_length是返回的字符串的数量,如果这个数量比原字符串的长度要短,lpad函数将会把字符串截取成padded_length; * pad_string是个可选参数,这个字符串是要粘贴到string1的左边,如果这个参数未写,lpad函数将会在string1的左边粘贴空格。 5、RPAD(粘贴字符) RPAD 在列的右边粘贴字符 6、Trim():截取字符串两端特殊字符 Trim('s' from 'string');可以指定从字符串两边要截取的特殊字符 |
2.3.2.1 CONCAT(strexp, strexp):
连接两个字符串
注意:在Oracle中只能连接两个字符串(MySQL中可以任何加字符串)
这里可以使用函数嵌套的方式
错误方式: |
select concat('123','456',789) from dual ORA-00909: 参数个数无效 |
正确方式(嵌套): |
select concat(concat('123','456'),'789') from dual; |
2.3.2.2 Substr(str,start_index,length)
从指定的位置截取指定长度的字符串
Str:的字符串
start_index:从第几个开始(第1开始计算)
如果是0,和1效果是一样的
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论