函数
1.sysdate
当前的日期包含时间
select sysdate from dual;
2.length(str)函数:
返回字符串的长度,str表示一个字符串
select length('aa') from dual;
--select * from a where length(name)=6;
3.concat(str1,str2)
str1,str2都是字符串,将字符串str1和str2拼接在一起
select concat('aa','bb') from dual;
||:它是字符串连接符
select 'aa'||'bb' from dual;
注意:字符串要用单引号括起来,在字符串中使用两个连着的单引号
这时第一个单引号是一个转义符号
4.chr(ASCCII)
将ASCCII码转换成字符
select chr(39) from dual;
5.substr(str,index,len)
字符串截取函数
--str是一个字符串,
--index截取的开始位置,
--len截取的长度(可省略)
select substr('abcdefg',2,2) from dual; #bc
6.trim([s from ]str)
--str表示字符串
--s表示字符,表示去除字符串两端的空格,如果加s,表示去除字符串两端的字符s
select trim(' abcd ') from dual;
select trim('$' from '$abcd$$') from dual;
ltrim(str[,'s']):去除字符串左边的空格或者字符s
--select ltrim(' abcd ') from dual;
rtrim(str[,'s']):去除字符串右边的空格或者字符--sselect rtrim('$abcd$','$') from dual;
7.replace(str,s,d)
替换函数
表示将字符中str中的s替换成d
--str字符串
--s要替换的内容,d替换成内容
select replace('abcd1qewr1qerazdf','qe','QE') from dual;
8.lpad/rpad(str,len[,s])
表示在字符串的左边右边填充空格或者s让字符串的长度到len的长度
--str表示字符串
--len表示扩展后的整个字符串长度
--s:表示要扩展的内容,可选参数
select lpad('abcd',2,'6') from dual;
select rpad('abcd',2,'6') from dual;
9.initcap(str)
str表示字符串,将字符串中的英文单词首字母大写
select initcap('helloworld') from dual;--H
select initcap('hello world') from dual;--H W
10.lower/upper(str)
将字符串全部转换成小写/大写
select lower(name) from a;
select upper(name) from a;
11.instr(str,s[,n1,n2])
在字符串中找某个字符的位置
在字符串str中从n1的位置开始查询第n2次出现字符s的位置
--str字符串
--s:要查询的字符,
--n1表示从位置开始查询,n2表示这个字符第几次出现
select instr('asdoqwerjldajsfoqjwelfjaoidsfj','j',10) from dual;
--从字符串的第10个字符开始查找第一次出现j的位置
12.floor(n)
取整函数,只取整数部分,不进行四舍五入
select floor(3.41) from dual;
13.mod(m,n)
求m除以n的余数的函数
select mod(3,2) from dual;
14.round(n,s)
四舍五入函数,n表示数字,s表示精度,默认是0
select round(3.134,1) from dual;
15.power(m,n)
求m的n次方
select power(2,8) from dual;
16.to_number(str[,format])
将字符串转换成数字
--str字符串
--format格式字符串
select to_number('78.1234') from dual;
17.to_date(str,format)
将字符串转换成固定格式的日期
--str是一个日期
--format:日期格式
yyyy:表示4位的年
MM:表示两位月
dd:表示两位的天
hh24:表示24小时制的小时
mi:表示分钟
ss:表示秒
day:表示星期
select to_date('1999-09-09 14:24:34','yyyy-MM-dd hh24:mi:ss') from dual;
18.to_char(date,format)
将日期转换成字符串
--date是一个日期
--format:日期格式
select to_char(sysdate,'yyyy') from dual;
19.add_months(date,n)
给日期加减n个月
select add_months(sysdate,3) from dual; --给日期加几个月
select add_months(sysdate,-2) from dual; --减n个月
20.months_between(date1,date2)
求两个日期相差多少个月
select months_between(sysdate,to_date('20210120','yyyyMMdd')) from dual;
21.last_day(date)
取日期当前月的最后一天
select last_day(sysdate) from dual;
22.trunc():截断函数
select trunc(3.13453,3) from dual;
--截断数字类型,第二个参数表示精度,不会四舍五入
select trunc(sysdate,'yyyy') from dual;
--截取到年(本年的第一天)
23.decode(exp,res1,value1,res2,value2,…,default)
--exp 表达式的
--res1,res2 ,..:表达式的结果
如果表达式结果和某一个res值相等,就会返回res后面对应的value
如果表达式的结果没有一个res值和它匹配,它会返回default默认值
--select decode(ssex,'男','男生','女','女生','未知') from student;
24.nvl(变量,默认值)
如果变量的值是空时,函数返回默认值
如果变量的值不为空返回变量的值
select nvl(comm,200) from a;
25.行列转换
1.行转列
将表中多行数据转成一行的多个字段输出。
/*
select username,
sum(case when subject='语文' then score else 0 end) 语文,
sum(case when subject='英语' then score else 0 end) 英语,
sum(case when subject='数学' then score else 0 end) 数学
from student group by username;
*/
pivot:行转列的函数
pivot(聚合函数(填进去的值) for (表头) in (表头对应的值))
select * from student pivot (sum(score) for subject in ('语','数','英'));
2.列转行
将表中多个列,每个列拉成一行数据。
unpivot:列转行函数
select * from studentScores2
unpivot(score --为列转行中多列变成一列的值取别名
for subject --在结果中成为一列的原多列取统一别名
in('语','数','英'));```
number(l,s) 数字类型
l 长度
s 精度(小数)
varchar2(l) 字符串类型
date 日期
timestamp 秒后面9位