怎样建立公司的网站,企业网站建设方案 功能规划,做韩国网站有哪些东西吗,优良的定制网站建设服务商Oracle函数#xff0c;当任意一个参数为空字符串或者null时#xff0c;结果返回null
聚合函数
count
使用方式有5种
select count(*) from student;--统计总行数
select count(0) from student;--统计总行数,括号里面的0表示什么意思#xff1f;
select count(id) from …Oracle函数当任意一个参数为空字符串或者null时结果返回null
聚合函数
count
使用方式有5种
select count(*) from student;--统计总行数
select count(0) from student;--统计总行数,括号里面的0表示什么意思
select count(id) from student;--统计列id不为null的总行数select count(rowid) from student;--统计总行数select count(distinct id) from student;--统计id不为null并且去掉id重复的总行数
ps:前面四种count的方式在没有索引的情况是一样的都会全表扫描。选中SQL按F5会打开解释计划窗口可以看到前四种count的方式执行过程都是一样。如果有索引一般情况下count(*),count(0),count(rowid)会走索引count(id)走索引扫描还是走全表扫描要看字段id是否有索引。
sum
select sum(idno) from student;--任意行的idno不能为非数字可以为null
avg
select avg(idno) from student;--计算之前会把null值排除在外
max
select max(idno) from student;--
列中的数据可以是数值、字符串或是日期时间数据类型会忽略null值但是如果所有的值都为null则会返回null字符串是怎么比较大小的
min
select min(idno) from student;--同上
字符函数
大小写
select lower(name) from dual; --lower()转小写
select upper(name) from dual; --upper()转大写
select initcap(name) from dual; --initcap()首字母大写
非英文字母不会进行转换但任然会查询出来null值也会查询出来
数据内容合并
select concat(id,name) from student;--concat函数只能是两个参数多行数据内容合并成一行可以使用||
字符串截取
substr
只针对字符类型
select substr(HelloWorld,0,3) value from dual;--返回结果Hel截取从“H”开始3个字符
select substr(HelloWorld,1,3) value from dual;--返回结果Hel截取从“H”开始3个字符
select substr(HelloWorld,2,3) value from dual;--返回结果ell截取从“e”开始3个字符
select substr(HelloWorld,0,100) value from dual;--返回结果HelloWorld100虽然超出预处理的字符串最长度但不会影响返回结果系统按预处理字符串最大数量返回。
select substr(HelloWorld,5,3) value from dual;--返回结果oWo
select substr(Hello World,5,3) value from dual;--返回结果o W (中间的空格也算一个字符串结果是o空格W)
select substr(HelloWorld,-1,3) value from dual;--返回结果d 从后面倒数第一位开始往后取1个字符而不是3个。
select substr(HelloWorld,-2,3) value from dual;--返回结果ld 从后面倒数第二位开始往后取2个字符而不是3个。
select substr(HelloWorld,-3,3) value from dual;--返回结果rld 从后面倒数第三位开始往后取3个字符
select substr(HelloWorld,-4,3) value from dual;--返回结果orl 从后面倒数第四位开始往后取3个字符select substr(HelloWorld,0) value from dual;--返回结果HelloWorld截取所有字符
select substr(HelloWorld,1) value from dual;--返回结果HelloWorld截取所有字符
select substr(HelloWorld,2) value from dual;--返回结果elloWorld截取从“e”开始之后所有字符
select substr(HelloWorld,3) value from dual;--返回结果lloWorld截取从“l”开始之后所有字符
select substr(HelloWorld,-1) value from dual;--返回结果d从倒数一个“d”开始,截取所有字符
select substr(HelloWorld,-2) value from dual;--返回结果ld从倒数第二个“l”开始,截取所有字符
select substr(HelloWorld,-3) value from dual;--返回结果rld从倒数第三个“r”开始,截取所有字符
trunc
trunc可以对日期进行格式化有关日期的格式参数参考https://blog.csdn.net/qq_26565861/article/details/83110968
trunc可以对数字进行截取与round的区别是不进行四舍五入
字符串长度计算
--length计算字符数lengthb计算字节数编码方式为UTF8/GBK时一个中文占3/2个字节长度
select length(hello你好) from dual;
select lengthb(hello你好) from dual;
查找字符的位置
select instr(helloworld, o) from dual;--instr从左向右找第一次出现的位置从1开始
select instr(helloworld, z) from dual;--找不到返回0
填充
select lpad(hello,10,#)from dual;--lpad如果位数不够从左边开始补位
select lpad(hello,10)from dual;--第三个参数不传时用空格
select lpad(甲骨文,10,$) from dual;--注意字符集编码为UTF8时中文也是占用两个长度
select rpad(hello,3,#)from dual;--rpad如果位数不够从右边边开始补位
去除空格
--基本用法注意全角空格去不掉
SELECT trim( aaa bbb ccc ) trim FROM dual;
SELECT ltrim( aaa bbb ccc ) trim FROM dual;
SELECT rtrim( aaa bbb ccc ) trim FROM dual;
--高级用法去除特定字符 trim( leading | trailing | both string1 FROM string2) 注意string1只能是单个字符如果没有设置string1参数默认去除空字符串
SELECT trim(leading $ from $aaa bbb ccc$) FROM dual;
SELECT trim(trailing $ from $aaa bbb ccc$) FROM dual;
SELECT trim(both $ from $aaa bbb ccc$) FROM dual;
SELECT trim(both from aaa bbb ccc ) FROM dual;
字符串替换
select replace(heLLo,LL,ll) from dual;
select replace(heLLo,LL) from dual;--未设置第三个参数时表示用空字符串替换
数字函数
四舍五入
--第二个参数为正整数表示小数点后多少位0表示取整负数表示小数点前n1位
select round(1234.5678,4) from dual;
select round(1234.5678,3) from dual;
select round(1234.5678,0) from dual;
select round(1234.5678,-1) from dual;
--对日期处理
select round(to_date(2003-10-15,yyyy-mm-dd),month)from dual;
select round(to_date(2003-10-16,yyyy-mm-dd),month)from dual;
select round(to_date(2003-6,yyyy-mm),year)from dual;
select round(to_date(2003-7,yyyy-mm),year)from dual;
转换函数
to_char
日期类型转字符串TO_CHAR(DATETIME)
select to_char(sysdate,yyyy-mm-dd hh24:mi:ss) from dual;
关于日期格式不同符号代表什么意思可以参考https://blog.csdn.net/qq_26565861/article/details/83110968
数字格式化TO_CHAR(NUMBER)
select to_char(1234,9,9,9,9) from dual;
select to_char(1234.34,9,9,9,9.99) from dual;
select to_char(1234.34,9,9,9,9.$99) from dual;
更多数字格式化的参数参考https://blog.csdn.net/jinlong5200/article/details/3135949
把NCLOB,CLOB,NCHAR转换为VARCHAR2 TO_CHAR(CHARACTER)
to_date
参考https://blog.csdn.net/qq_26565861/article/details/83110968
to_number
可以将char和varchar2类型转换成number类型
select to_number($234234.4350,$999999.0000) from dual;
格式值含义9代表一个数字0强迫0显示$显示美元符号L强制显示一个当地的货币符号.显示一个小数点, 显示一个千位分隔符号
cast
cast可以进行数据类型转换
语法cast( 列名/值 as 数据类型 )
select cast(1 as varchar2(10)) from dual;
select cast(1 as number) from dual;
判断函数
decode
用来判断值是否相等语法格式为decode(列或值,值1,返回值1,值2,返回值2,…值n,返回值n,缺省值)
具体含义为如果列或值等于第一个值那么返回第一个返回值如果等于第二个值那么返回第二个返回值否则返回缺省值
select decode(小米,华为,android,三星,android,苹果,ios,其他) from dual;
select decode(小米,华为,android,三星,android,苹果,ios) from dual;--如果没有设置默认值参数,返回null
nvl
语法NVL(参数1,参数2 )
含义如果参数1不为null则返回参数1否则返回参数2
select nvl(测试,默认值) from dual;nvl2
语法nvl2(参数1参数2参数3)
含义如果参数1不为null返回参数2否则返回参数3
select nvl2(,参数2,参数3) from dual;
select nvl2(参数1,参数2,参数3) from dual;
nullif
语法NULLIF (参数1参数2)
含义若两个参数相等返回NULL不相等等返回参数1
其他函数
ROW_NUMBER()OVER
一对多取多的一方最新的一条数据分类PARTITION BY排序ORDER BY
SELECT * FROM(SELECT u.*,ROW_NUMBER()OVER(PARTITION BY p.user_id ORDER BY p.flush_time desc)RNFROM STS_LPATROL_APPUSER_T uleft JOIN STS_LPATROL_PHONEDEV_T p ON u.user_idp.user_id)T where RN1
pivot
行转列将多行数据转换成一行数据的多个列
create table tb_student_grade(name varchar2(50),id varchar2(32),course varchar2(50),grade number);insert into tb_student_grade(name,id,course,grade) values(cc,1,math,100);
insert into tb_student_grade(name,id,course,grade) values(cc,1,chinese,110);
insert into tb_student_grade(name,id,course,grade) values(cc,1,english,120);insert into tb_student_grade(name,id,course,grade) values(cc,2,math,100);
insert into tb_student_grade(name,id,course,grade) values(cc,2,chinese,110);
insert into tb_student_grade(name,id,course,grade) values(cc,2,english,120);insert into tb_student_grade(name,id,course,grade) values(lp,3,math,50);
insert into tb_student_grade(name,id,course,grade) values(lp,3,chinese,60);
insert into tb_student_grade(name,id,course,grade) values(lp,3,english,70);commit;select * from tb_student_grade pivot(max(grade) for course in(math as 数学,chinese as 语文,english as 英语));
unpivot
列转行将一行数据的多个列转换成多行数据
select * from tb_student_grade pivot(max(grade) for course in(math as 数学,chinese as 语文,english as 英语)) unpivot(grade for course in(数学,语文,英语));
合并多行数据
wm_concat
用来将分组后的多行数据合并成一行
select t.deptno,wm_concat(t.ename) from emp t group by t.deptno;
ename拼接的顺序不是按照ename来的
listagg
select t.deptno,listagg(t.ename,:) within group (order by t.ename) from emp t group by t.deptno;
ename拼接的顺序可以按照某个字段来拼接的字符也可以指定。是11g新增的函数