Oracle学习之路——单行函数

终于到了单行函数部分。

1.认识单行函数

特征:对单行进行操作;每行返回一个值;有可能返回值与原参数类型不一致;可写在select、where、order by中;参数数量不一定;可嵌套。
分类:字符:日期、数值、转换、通用。

2.字符函数

大小写转换函数
  1. Upper(列 | 字符串)将字符串全部内容转换为大写
  2. Lower(列 | 字符串)将字符串全部内容转换为小写
  3. initcap(列 | 字符串)将字符串首字母大写
字符处理函数(默认编码从1开始)
  1. 代替replace(s1,s2,s3)把s1中的s2用s3代替
  2. 求长度length(列 | 字符串)取字符串长度
  3. 截取substr(列|字符串,n1[,n2])从第n1位开始,长度为n2的子串。
  • –如果n2省略,取第n1位开始的所有字符。
  •   –如果n1是负值,表示从第一个参数的后面第abs(n1)位开始 向右取长度为n2的子串
4.连接concat(列1|字符串1,列2|字符串2)连接两个值,相当于||连接符
5.求位置instr(s1,s2,[,n1],[n2]) 返回s1中,子串s2从n1开始,第n2次出现的位置。默认为1
6.trim(leading | trailing | both c1 From source) 去除字符串头部或尾部(头尾)的字符(默认去掉空格)
7.左填充 Lpad(s1,n1,s2) s1被s2从左面填充到n1长度后的字符串
8.右 填充 Rpad(s1,n1,s2) s1被s2从右面填充到n1长度后的字符串
  • 当N1为负值时可当截取使用

3.数值函数

  1. 四舍五入round(列 | 表达式,n)四舍五入到小数点后第n位,(默认小数点后的数字全部四舍五入)
  2. 截取trunc(列 | 表达式,n)值截取到小数点后的第n位(默认不保留小数)
  3. 取余mod(m,n)m除以n后的余数

4.日期函数

  1. SYSDATE:返回系统日期
  2. months_between(日期1,日期2):返回两个日期类型数据之间间隔的自然月数
  3. add_months(日期,数字):返回指定日期加上相应的月数后的日期
  4. next_day(日期,星期数):返回下一星期XX的具体日期 (星期日为第一天1,星期六为最后一天7)
  5. last_day(日期):返回指定日期当月后一天的日期
  6. ROUND(date[,‘fmt’])将date按照fmt指定的格式进行四舍五入, fmt为可选项,如果没有指定fmt,则默认为DD,将date四舍五入为 近的天 近的天。 格式码:世纪CC,年YY,月MM,日DD,小时HH24,分MI,秒SS
  7. TRUNC( date[,‘fmt’] )将date按照fmt指定的格式进行截断,fmt为 可选项,如果没有指定fmt,则默认为‘DD’,将date截取为近的 天。
  8. extract([year],[month],[day]):返回日期类型数据中的年份月份或者日
No. 格式 描述
1 YYYY 完整的年份数字
2 YY 年的后两位
3 YEAR 年份的文字表示,四位
4 MONTH 月份的文字表示,两位
5 MM 两位表示月份
6 DAY 星期几
7 DD 一个月中的天数
8 W 一个月中的周数
9 WW 一年中的周数
10 HH 12小时制
11 HH24 24小时制
12 MI 分钟
13 SS

5.转换函数

  1. to_char(date | number,'format')必须用单引号引起来并且是大小写敏感的 
  2. to_number(char,'format')
  3. to_date(char,'format')
No. 格式 描述
1 9 表示一位数字
2 0 显示前导0
3 $ 美元
4 L 本地货币符号
5 .点 小数点
6 ,逗号 千位符

6.通用函数

  1. nvl(x1,x2)若x1不是null,返回x1 ,否则返回x2——使用nvl()后,内容为null的数据便可进行算术运算
  2. nvl(x1,x2,x3若x1不是null,返回x2 ,否则返回x3
  3. nulif(x1,x2)若两个表达式相等,返回null,否则返回x1——进行除法运算时,判断分母是否为空 a/nullif(b,0)
  4. coalesce(……)参数不受限——返回第一个不为空的参数
  5. case和decode函数

例题:

1写一个查询,用首字母大写,其它字母小写显示雇员的ename,显 示名字的长度,并给每列一个适当的标签,条件是满足所有雇员名字 的开始字母是J、A 或M 的雇员,并对查询结果按雇员的ename升序 排序
select initcap(ename) name,length(ename) len from emp where substr(ename,1,1)in('J','A','M') order by ename asc;
2查询员工姓名中中包含大写或小写字母A的员工姓名。
select ename from emp  where ename like'%A%'or ename like '%a%';
3查询每个职工的编号,姓名,工资。要求将查询到的数据按照定的格式合并成个字符串. –前10位:编号,不足部分用*填充,左对齐。 –中间10位:姓名,不足部分用*填充,左对齐。后10位工资不足部分用*填充右对齐 。
select lpad(empno,10,'*')||lpad(ename,10,'*')||rpad(sal,10,'*') info from emp;
4.写一个查询,分别计算100.456 四舍五入到小数点后第2位,第1位,整数位的值。 
select round(100.456,2) sec,round(100.456,1) fir,round(100.456,0)from emp;
5.写一个查询,分别计算100.456 从小数点后第 2位第1位整数位截断的值。
select trunc(100.456,2) sec,trunc(100.456,1) fir,trunc(100.456,0)from emp;
6.如果员工试用期6个月,查询职位不是MANAGER的员工姓 名,入职日期,转正日期,入职日期后的第一个星期一, 入职当月的最后一天日期
select ename,hiredate,add_months(hiredate,6) "转正日期",
next_day(hiredate,2) "第一个星期一",last_day(hiredate) "当月最后一天"
from emp;
7.显示ename、hiredate和雇员开始工作日是星期几,列标签DAY
select ename,hiredate,to_char(hiredate,'DAY') day from emp;
8.把字符串2015-3月-18 13:13:13 转换成日期格式,并计算和系统当前时间间隔多少天
select sysdate-to_date('2015-3月-18 13:13:13','yyyy-mm"月"-dd hh24:mi;ss') from emp;
9.查询员工的姓名及其经理编号,要求对于没有经理的显示 “No Manager”字符串
select ename,nvl(to_char(mgr),'no manager') from emp;
10.将员工的参加工作日期按如下格式显示:月份/年份。
select ename,to_char(hiredate,'mm/yyyy')"mon/year" from emp;
11在员工表中查询出员工的工资,并计算应交税款:如果工 资小于1000税率为0如果工资大于等于1000并小于2000 资小于1000,税率为0,如果工资大于等于1000并小于2000, 税率为10%,如果工资大于等于2000并小于3000,税率为 15%,如果工资大于等于3000,税率为20%。 
select ename,
(CASE trunc(sal/1000)
       WHEN 0 THEN sal*0
       WHEN 1 THEN sal*0.1
       WHEN 2 THEN sal*0.15
       ELSE sal*0.2
       END) tax
from emp;












你可能感兴趣的:(oracle学习之路)