Oracle学习笔记(十三)——sql函数的使用

在做oracle测试时,可以使用dual表

一、字符函数:最常用的函数
1、lower(char):将字符串转化为小写的格式。
2、upper(char):将字符串转化为大写的格式。
3、length(char):返回字符串的长度。
4、substr(char,m,n):取字符串的子串,从第m位取,取n个字符。
5、eg:
  • 所有员工的名字按小写的方式显示
    • select lower(ename) from emp;
  • 所有员工的名字按大写的方式显示
    • select upper(ename) from emp;
  • 显示正好为5个字符的员工的姓名
    • select * from emp where length(ename)=5;
  • 显示所有员工姓名的前三个字符
    • select substr(1,3) from emp;
  • 以首字母大写的方式显示所有员工的姓名
    • select upper(substr(ename,1,1)) || lower(substr(ename,2,length(ename)-1)) from emp;
  • 以首字母小写的方式显示所有员工的姓名
    • select lower(substr(ename,1,1)) || upper(substr(ename,2,length(ename)-1)) from emp;



6、replace(char1,search_string,repalce_string)
7、instr(char1,char2,[,n[,m]]):取子串在字符串的位置
  • 显示所有员工的姓名,用“我是A”代替所有的"A"
    • select replace(ename,'A','我是A') from emp;


二、数学函数
1、数学函数的输入参数和返回值的数据类型都是数字类型的,数学函数包括cos,cosh,exp,ln,log,,sin,sinh,sqrt,tan,tanh,acos,asin,atan,round。
2、round(n,[m]):用于执行四舍五入,如果省掉m,则四舍五入到整数;如果m是正数,则四舍五入到小数点的m位后;如果m是负数,则四舍五入到小数点的m位前。
3、trunc(n,[m] ):用于截取数字,如果缺省m,则截取小数部分;如果m是正数,则截取到小数点的m位后;如果m是负数,则截取到小数点的前m位。
4、mod(m,n)
  • SQL> select mod(10,3) from dual;
     MOD(10,3)
    ----------
             1
5、floor(n):返回小于或是等于n的最大整数。
6、ceil(n):返回大于或是等于n的最小正数。
7、实例
  • 显示在一个月为30天的情况下,所有员工的日薪金,忽略余数。
    • select ename,trunc(sal/30) from emp;
    • select ename,floor(sal/30) from emp;



8、其它
  • abs(n):返回数字n的绝对值
  • acos(n):返回数字的反余弦值
  • asin(n):返回数字的正余弦值
  • atan(n):返回数字的反正切
  • cos(n)
  • exp(n):返回e的n次幂
  • log(m,n):返回对数值
  • power(m,n):返回m的n次幂


三、日期函数:用于处理date类型的数据,默认情况下日期格式是dd-mon-yy,即12-7月-78。
1、sysdate:返回系统时间
2、add_months(d,n)
3、last.day(d):返回指定日期所在月份的最后一天
4、实例
  • 查找已经入职8个月多的员工
    • select * from emp where sysdate>add_months(hiredate,8);
  • 显示满10年服务年限的员工的姓名和受雇日期
    • select ename,hiredate from emp where sysdate>add_months(hiredate,120);
  • 对于每个员工,显示其加入公司的天数
    • select ename,trunc(sysdate-hiredate) "入职天数" from emp;
  • 找出各月倒数第3天受雇的所有员工
    • select ename,hiredate from emp where last_day(hiredate)-hiredate=2;


四、转换函数:用于将数据类型的一种转为另外一种。在某些情况下,oracle server允许值的数据类型和实际的不一样,这是oracle server会隐含转化数据类型。
1、隐含的转换数据类型
1)实例:
  • SQL> create table t1(id int);
    SQL> insert into t1 values('10');
    此时,oracle会自动将‘10’转化为10
  • SQL> create table t2(id varchar2(10));
    SQL> insert into t2 values(1);
    此时,oracle会自动将1转化为‘1’。
2)注:尽管oracle可以进行隐含的数据类型的转换,但是它并不适应所有的情况。为了提高程序的可靠性,应该使用转换函数进行转换。

2 、to_char
  • yy:两位数字的年份,2004——>04
  • yyyy:四位数字的年份,2004年
  • mm:两位数字的月份,8月——>08
  • dd:2位数字的天,30号——>30
  • hh24:8点——>20
  • hh12:8点——>08
  • mi、ss——>显示分钟、秒

  • 9:显示数字,并忽略前面0
  • 0:显示数字,如位数不足,则用0补齐
  • .:在指定为哈子显示小数点
  • ,:在指定位置显示逗号
  • $:在数字前加美元
  • L:在数字前加本地货币符号
  • C:在数字前加国际货币符号
  • G:在指定位置显示组分隔符
  • D:在指定位置显示小数点符号(.)

  • select ename,to_char(hiredate,'yyyy-mm-dd hh24:mi:ss') from emp;


  • SQL> insert into emp values(8881,'test用户','MANAGER',7782,sysdate,23,23,10);
    SQL> select ename,to_char(hiredate,'yyyy-mm-dd hh24:mi:ss') from emp;

  • select ename,to_char(hiredate,'yyyy-mm-dd hh24:mi:ss'),to_char(sal,'L99,999.99') from emp;


  • 显示1980年入职的所有员工
    • select ename,to_char(hiredate,'yyyy') from emp where to_char(hiredate,'yyyy')='1980';
  • 显示所有12月份入职的员工
    • select ename,to_char(hiredate,'yyyy-mm') from emp where to_char(hiredate,'mm')='12';

3、to_date:将字符串转换成date类型的数据


五、系统函数
1、terminal:当前会话客户所对应的终端的标识符
2、language:语言
3、db_name:当前数据库名称
4、nls_date_format:当前会话客户所对应的日期格式
5、session_user:当期会话客户所对应的数据库用户名
6、current_schema:当前会话客户所对应的默认方案名
7、host:返回数据库所在主机的名称
8、示例:
  • 查询正在使用的数据库名称
    • select sys_context('userenv','language') from dual;

  • 查询正在使用的语言
    • select sys_context('userenv','db_name') from dual;

  • 查询当前会话的用户名
    • select sys_context('userenv','session_user') from dual;

  • 查询当前的方案名(一个用户名对应一个方案
    • select sys_context('userenv','session_schema') from dual;

                 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值