Oracle中常用sql函数(1)

1、动态性能视图及相关数据字典

(1)查看服务器状态------select  open_mode  from  v$database

(2)查看实例名-------select  instance_name  from  v$instance

(3)查看当前用户数据库下面有哪些表--------select  table_name  from  user_tables

(4)查看数据字典--------select  *  from  dict

(5)select * from dict where table_name='USER_TABLES' ------------注意条件中值的大写

(6)查看字典视图列--------select column_name,comments from dict_columns where table_name='USER_TABLES';

2、常用sql

(1)使用运算符:select age+10 from 表名;

(2)in匹配集合中的任意值:select * from student_drb where name in('张三','宝宝');

(3)like模糊查询:%匹配0个或多个任意字符,_匹配1个任意字符-------select * from student_drb where name like '_三'

(4)null判断某列为空:select * from t_user where sex is null;(这里用is,不能用=,如果要返回不为null的记录就可以用is not null)

(5)返回不为空且不重复的记录数: select count(distinct sex) from t_user;

(6)group by分组(分组了就不能直接返回*,经常和聚合函数count(age)一起使用):
             <1>单字段,按部门号分组,并统计每部门人数:select deptno,count(*) from emp group by deptno;
             <2>多字段,按性别和年龄分组: select sex,age,count(*) from t_user group by sex,age;             
        group by有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面。

(7)having过滤分组:select username from t_user group by username having count(*) >=2;

(8)字符串连接:select '学号:' || sno as s,'姓名:' || name from student_drb   注意:使用单引号不能使用双引号

(9)length函数:select age, length(age) len from student_drb

(10)LTRIM,RTRIM,TRIM【多用于处理空格】
LTRIM:左删除----left
RTRIM:右删除----right
TRIM:删除串两边的字符
select length('123') len1, length(ltrim(' 123  ')) lentrim from dual;
select length(' 123  ') len1, length(rtrim(' 123  ')) lentrim from dual;
select length(' 123  ') len1, length(trim(' 123  ')) lentrim from dual;

(11)TO_CHAR 是把日期或数字转换为字符串
   select sysdate from dual;
 select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
 select to_char(123,'9999.00') from dual; 
 select to_char(12333,'$99,999.99') from dual;
 select to_char(123334444,'$99,999.99') from dual;

另外,

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as nowTime from dual;   //日期转化为字符串   
select to_char(sysdate,'yyyy') as nowYear   from dual;   //获取时间的年   
select to_char(sysdate,'mm')    as nowMonth from dual;   //获取时间的月   
select to_char(sysdate,'dd')    as nowDay    from dual;   //获取时间的日   
select to_char(sysdate,'hh24') as nowHour   from dual;   //获取时间的时   
select to_char(sysdate,'mi')    as nowMinute from dual;   //获取时间的分   
select to_char(sysdate,'ss')    as nowSecond from dual;   //获取时间的秒

select to_char(sysdate,'day') from dual---------------------返回的是星期几

(12)substr  截取函数
 select substr('12345',2,3) from dual;(截取从第二个字符开始的3个字符)------------234
 select substr('123456789',-5) from dual;(截取后5位)--------------56789

(13)字符是否包含(返回查找字符或字符串在原字符串中的位置)instr(string,substring,position,occurrence)
string:代表源字符串
substring:代表想从源字符串中查找的子串
position:代表查找开始的位置,默认为1
occurrence:代表查找值第几次出现返回结果为字符串的位置,没有找到,instr函数返回0.

SELECT instr('syranmo','s') FROM dual; -- 返回 1
SELECT instr('syranmo','ra') FROM dual;  -- 返回 3
SELECT instr('syran mo','a',1,2) FROM dual;  -- 返回 0
(根据条件,由于a只出现一次,第四个参数2,就是说第2次出现a的位置,显然第2次是没有再出现了,所以结果返回0。注意空格也算一个字符!)
SELECT instr('syranmo','an',-1,1) FROM dual;  -- 返回 4
       (就算是由右到左数,索引的位置还是要看‘an’的左边第一个字母的位置,所以这里返回4)
SELECT instr('abc','d') FROM dual;  -- 返回 0
   注:也可利用此函数来检查 'abc' 中是否包含  'd',如果返回0表示不包含,否则表示包含。

(14)abs 绝对值 
select abs(-5) from dual; (返回值为5)
select abs(5.5)  from dual;(返回值为5.5)

(15)Round 函数 (四舍五入)
select round(123.123) from dual;---------123
select round(123.8) from dual;---------124

(16)trunc  取整【 截掉小数点后值,不会四舍五入】
select 3/2 from dual;-----------------------1.5
select trunc(3/2) from dual;---------------1

(17)to_date 把字符串转换成日期

select  to_date('2015-05-07','yyyy-mm-dd')  from dual

两个日期间的天数      
    select floor(sysdate - to_date('20150501','yyyymmdd')) from dual; -------其中floor(x)函数是返回不大于x的最大整数;ceil(x)函数是返回不小于x的最大整数
    select sysdate - to_date('20150501','yyyymmdd') from dual;     
    select trunc(sysdate - to_date('20150501','yyyymmdd')) from dual; 

月份差 
  select months_between(to_date('03-31-2015','MM-DD-YYYY'),to_date('01-31-2015','MM-DD-YYYY')) "MONTHS" FROM DUAL;  
  select months_between(to_date('03-31-2015','MM-DD-YYYY'),to_date('01-15-2015','MM-DD-YYYY')) "MONTHS" FROM DUAL;     

一年中的第几天

select trunc(sysdate - to_date('20160101','yyyymmdd') +1) as d from dual;

(18)Replace替换函数
    select replace('abc','b','1') from dual;   ------------a1b

(19)lpad [左添充] rpad [右填充](用于控制输出格式)
select lpad('func',7,'=') s1, rpad('func',7,'-') s2 from dual;---------     ===func,func---

总共7个字符不够的向左或向右填充


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值