知识大全 oracle常用函数汇总

Posted 时间

篇首语:恢弘志士之气,不宜妄自菲薄。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 oracle常用函数汇总相关的知识,希望对你有一定的参考价值。

以下是对oracle中的常用函数进行了汇总介绍 需要的朋友可以过来参考下  

  一 运算符算术运算符 + * / 可以在select 语句中使用 连接运算符 || select deptno|| dname from dept; 比较运算符 > >= = != < <= like beeen is null in 逻辑运算符 not and or 集合运算符 intersect union union all minus 要求 对应集合的列数和数据类型相同      查询中不能包含long 列      列的标签是第一个集合的标签      使用order by时 必须使用位置序号 不能使用列名 例 集合运算符的使用

复制代码 代码如下: intersect union union all minus select * from emp intersect select * from emp where deptno= ; select * from emp minus select * from emp where deptno= ; select * from emp where deptno= union select * from emp where deptno in ( ); 不包括重复行 select * from emp where deptno= union all select * from emp where deptno in ( ); 包括重复行

   二 ORACLE日期时间函数大全   TO_DATE格式(以时间:    : : 为例)         Year:              yy o digits 两位年                显示值:         yyy three digits 三位年                显示值:         yyyy four digits 四位年                显示值:         Month:              mm    number     两位月              显示值:         mon    abbreviated 字符集表示          显示值: 月 若是英文版 显示nov             month spelled out 字符集表示          显示值: 月 若是英文版 显示november         Day:              dd    number         当月第几天        显示值:         ddd    number         当年第几天        显示值:         dy    abbreviated 当周第几天简写    显示值:星期五 若是英文版 显示fri         day    spelled out   当周第几天全写    显示值:星期五 若是英文版 显示friday                ddspth spelled out ordinal elfth               Hour:               hh    o digits 小时进制            显示值:               hh o digits 小时进制            显示值:               Minute:               mi    o digits 进制                显示值:               Second:               ss    o digits 进制                显示值:               其它               Q     digit         季度                  显示值:               WW    digit         当年第几周            显示值:               W    digit          当月第几周            显示值:         小时格式下时间范围为 : : : :               小时格式下时间范围为 : : : : 日期和字符转换函数用法(to_date to_char)          select to_char(sysdate yyyy mm dd hh :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 hh ) as nowHour   from dual;   //获取时间的时   select to_char(sysdate mi )    as nowMinute from dual;   //获取时间的分   select to_char(sysdate ss )    as nowSecond from dual;   //获取时间的秒 select to_date( : : yyyy mm dd hh :mi:ss )    from dual//  select to_char( to_date( J ) Jsp ) from dual          显示Two Hundred Twenty Two   求某天是星期几         select to_char(to_date( yyyy mm dd ) day ) from dual;         星期一         select to_char(to_date( yyyy mm dd ) day NLS_DATE_LANGUAGE = American ) from dual;         monday         设置日期语言         ALTER SESSION SET NLS_DATE_LANGUAGE= AMERICAN ;         也可以这样         TO_DATE ( YYYY mm dd NLS_DATE_LANGUAGE = American )      两个日期间的天数          select floor(sysdate to_date( yyyymmdd )) from dual;   时间为null的用法         select id active_date from table          UNION         select TO_DATE(null) from dual;          注意要用TO_DATE(null)      月份差      a_date beeen to_date( yyyymmdd ) and to_date( yyyymmdd )         那么 月 号中午 点之后和 月 号的 点之前是不包含在这个范围之内的          所以 当时间需要精确的时候 觉得to_char还是必要的 日期格式冲突问题          输入的格式要看你安装的ORACLE字符集的类型 比如: US ASCII date格式的类型就是: Jan           alter system set NLS_DATE_LANGUAGE = American          alter session set NLS_DATE_LANGUAGE = American          或者在to_date中写          select to_char(to_date( yyyy mm dd ) day NLS_DATE_LANGUAGE = American ) from dual;          注意我这只是举了NLS_DATE_LANGUAGE 当然还有很多           可查看          select * from nls_session_parameters          select * from V$NLS_PARAMETERS           

复制代码 代码如下:    select count(*)         from ( select rownum rnum             from all_objects             where rownum <= to_date( yyyy mm dd ) to_date(              yyyy mm dd )+             )         where to_char( to_date( yyyy mm dd )+rnum D )              not in ( )     

      查找 至 间除星期一和七的天数         在前后分别调用DBMS_UTILITY GET_TIME 让后将结果相减(得到的是 / 秒 而不是毫秒)       查找月份  

复制代码 代码如下:     select months_beeen(to_date( MM DD YYYY ) to_date( MM DD YYYY )) "MONTHS" FROM DUAL;                   select months_beeen(to_date( MM DD YYYY ) to_date( MM DD YYYY )) "MONTHS" FROM DUAL;         

   Next_day的用法     

复制代码 代码如下:     Next_day(date day)          Monday Sunday for format code DAY          Mon Sun for format code DY          for format code D    

            select to_char(sysdate hh:mi:ss ) TIME from all_objects         注意 第一条记录的TIME 与最后一行是一样的         可以建立一个函数来处理这个问题     

复制代码 代码如下:    create or replace function sys_date return date is         begin         return sysdate;         end;         select to_char(sys_date hh:mi:ss ) from all_objects;  

   获得小时数           extract()找出日期或间隔值的字段值

复制代码 代码如下:     SELECT EXTRACT(HOUR FROM TIMESTAMP : : ) from offer          SQL> select sysdate to_char(sysdate hh ) from dual;          SYSDATE TO_CHAR(SYSDATE HH )                    : :           SQL> select sysdate to_char(sysdate hh ) from dual;          SYSDATE TO_CHAR(SYSDATE HH )                    : :      

   年月日的处理     

复制代码 代码如下:    select older_date              newer_date              years              months              abs(              trunc(               newer_date                add_months( older_date years* +months )              )             ) days    from ( select              trunc(months_beeen( newer_date older_date )/ ) YEARS               mod(trunc(months_beeen( newer_date older_date )) ) MONTHS               newer_date               older_date              from (               select hiredate older_date add_months(hiredate rownum)+rownum newer_date                    from emp              )            )     

   处理月份天数不定的办法         select to_char(add_months(last_day(sysdate) + ) yyyymmdd ) last_day(sysdate) from dual      找出今年的天数         select add_months(trunc(sysdate year ) ) trunc(sysdate year ) from dual         闰年的处理方法         to_char( last_day( to_date(     | | :year mmyyyy ) ) dd )         如果是 就不是闰年      yyyy与rrrr的区别     

复制代码 代码如下:    YYYY TO_C                  yyyy          rrrr          yyyy          rrrr      

   不同时区的处理         select to_char( NEW_TIME( sysdate GMT EST ) dd/mm/yyyy hh:mi:ss ) sysdate         from dual;    秒钟一个间隔  

复制代码 代码如下:    Select TO_DATE(FLOOR(TO_CHAR(sysdate SSSSS )/ ) * SSSSS ) TO_CHAR(sysdate SSSSS )         from dual         : :          SSSSS表示 位秒数       

   一年的第几天         select TO_CHAR(SYSDATE DDD ) sysdate from dual    : :       计算小时 分 秒 毫秒 

复制代码 代码如下:      select           Days            A            TRUNC(A* ) Hours            TRUNC(A* * *TRUNC(A* )) Minutes            TRUNC(A* * * *TRUNC(A* * )) Seconds            TRUNC(A* * * * *TRUNC(A* * * )) mSeconds          from          (           select           trunc(sysdate) Days            sysdate trunc(sysdate) A           from dual         )         select * from tabname         order by decode(mode FIFO )*to_char(rq yyyymmddhh miss );         //         floor((date date ) / ) 作为年         floor((date date ) / ) 作为月         d(mod(date date ) )作为日

   next_day函数      返回下个星期的日期 day为 或星期日 星期六 表示星期日    next_day(sysdate )是从当前开始下一个星期五 后面的数字是从星期日开始算起                   日 一 二 三 四 五 六          select    (sysdate to_date( : : yyyy mm dd hh :mi:ss ))* * * from ddual    日期 返回的是天 然后 转换为ss round[舍入到最接近的日期](day:舍入到最接近的星期日)    select sysdate S    round(sysdate) S    round(sysdate year ) YEAR    round(sysdate month ) MONTH    round(sysdate day ) DAY from dual trunc[截断到最接近的日期 单位为天] 返回的是日期类型    select sysdate S                           trunc(sysdate) S                  //返回当前日期 无时分秒      trunc(sysdate year ) YEAR         //返回当前年的 月 日 无时分秒      trunc(sysdate month ) MONTH      //返回当前月的 日 无时分秒      trunc(sysdate day ) DAY           //返回当前星期的星期天 无时分秒    from dual 返回日期列表中最晚日期    select greatest( 月 月 月 ) from dual 计算时间差      注:oracle时间差是以天数为单位 所以换算成年月 日       select floor(to_number(sysdate to_date( : : yyyy mm dd hh :mi:ss ))/ ) as spanYears from dual        //时间差 年       select ceil(moths_beeen(sysdate to_date( : : yyyy mm dd hh :mi:ss ))) as spanMonths from dual        //时间差 月       select floor(to_number(sysdate to_date( : : yyyy mm dd hh :mi:ss ))) as spanDays from dual             //时间差 天       select floor(to_number(sysdate to_date( : : yyyy mm dd hh :mi:ss ))* ) as spanHours from dual         //时间差 时       select floor(to_number(sysdate to_date( : : yyyy mm dd hh :mi:ss ))* * ) as spanMinutes from dual    //时间差 分       select floor(to_number(sysdate to_date( : : yyyy mm dd hh :mi:ss ))* * * ) as spanSeconds from dual //时间差 秒 更新时间      注:oracle时间加减是以天数为单位 设改变量为n 所以换算成年月 日      select to_char(sysdate yyyy mm dd hh :mi:ss ) to_char(sysdate+n* yyyy mm dd hh :mi:ss ) as newTime from dual        //改变时间 年      select to_char(sysdate yyyy mm dd hh :mi:ss ) add_months(sysdate n) as newTime from dual                                 //改变时间 月      select to_char(sysdate yyyy mm dd hh :mi:ss ) to_char(sysdate+n yyyy mm dd hh :mi:ss ) as newTime from dual            //改变时间 日      select to_char(sysdate yyyy mm dd hh :mi:ss ) to_char(sysdate+n/ yyyy mm dd hh :mi:ss ) as newTime from dual         //改变时间 时      select to_char(sysdate yyyy mm dd hh :mi:ss ) to_char(sysdate+n/ / yyyy mm dd hh :mi:ss ) as newTime from dual      //改变时间 分      select to_char(sysdate yyyy mm dd hh :mi:ss ) to_char(sysdate+n/ / / yyyy mm dd hh :mi:ss ) as newTime from dual   //改变时间 秒 查找月的第一天 最后一天      SELECT Trunc(Trunc(SYSDATE MONTH ) MONTH ) First_Day_Last_Month        Trunc(SYSDATE MONTH ) / Last_Day_Last_Month        Trunc(SYSDATE MONTH ) First_Day_Cur_Month        LAST_DAY(Trunc(SYSDATE MONTH )) + / Last_Day_Cur_Month    FROM dual; 三 字符函数(可用于字面字符或数据库列) 字符串截取    select substr( abcdef ) from dual 查找子串位置    select instr( abcfdgfdhd fd ) from dual 字符串连接    select HELLO || hello world from dual; )去掉字符串中的空格     select ltrim( abc ) s     rtrim( zhang ) s     trim( zhang ) s from dual    )去掉前导和后缀     select trim(leading from ) s     trim(trailing from ) s     trim( from ) s from dual; 返回字符串首字母的Ascii值    select ascii( a ) from dual 返回ascii值对应的字母    select chr( ) from dual 计算字符串长度    select length( abcdef ) from dual initcap(首字母变大写) lower(变小写) upper(变大写)    select lower( ABC ) s          upper( def ) s        initcap( efg ) s    from dual; Replace    select replace( abc b xy ) from dual; translate    select translate( abc b xx ) from dual; x是 位 lpad [左添充] rpad [右填充](用于控制输出格式)    select lpad( func = ) s rpad( func ) s from dual;    select lpad(dname = ) from dept; decode[实现if then 逻辑]   注:第一个是表达式 最后一个是不满足任何一个条件的值    select deptno decode(deptno 其他 ) from dept;    例:    select seed account_name decode(seed ) from t_userInfo//如果seed为 则取 ;为 取 ;其它取    select seed account_name decode(sign(seed ) big seed little seed equal seed ) from t_userInfo//如果seed> 则显示大;为 则显示小;其它则显示相等 case[实现switch case 逻辑]

复制代码 代码如下:     SELECT CASE X FIELD          WHEN X FIELD < THEN X FIELD 小于          WHEN X FIELD < THEN X FIELD 小于          WHEN X FIELD < THEN X FIELD 小于          ELSE UNBEKNOWN         END    FROM DUAL

   注:CASE语句在处理类似问题就显得非常灵活 当只是需要匹配少量数值时 用Decode更为简洁 四 数字函数 取整函数(ceil 向上取整 floor 向下取整)    select ceil( ) N floor( ) N from dual; 取幂(power) 和 求平方根(sqrt)    select power( ) N sqrt( ) N from dual; 求余    select mod( ) from dual; 返回固定小数位数 (round:四舍五入 trunc:直接截断)    select round( ) N trunc( ) N from dual; 返回值的符号(正数返回为 负数为 )    select sign( ) sign( ) from dual; 五 转换函数 to_char()[将日期和数字类型转换成字符类型]    ) select to_char(sysdate) s         to_char(sysdate yyyy mm dd ) s         to_char(sysdate yyyy ) s         to_char(sysdate yyyy mm dd hh :mi:ss ) s         to_char(sysdate hh :mi:ss ) s         to_char(sysdate DAY ) s     from dual;    ) select sal to_char(sal $ ) n to_char(sal $ ) n from emp to_date()[将字符类型转换为日期类型]     insert into emp(empno hiredate) values( to_date( yyyy mm dd )); to_number() 转换为数字类型     select to_number(to_char(sysdate hh )) from dual; //以数字显示的小时数 六 其他函数    user:     返回登录的用户名称     select user from dual;    vsize:     返回表达式所需的字节数     select vsize( HELLO ) from dual;    nvl(ex ex ):       ex 值为空则返回ex 否则返回该值本身ex (常用)     例 如果雇员没有佣金 将显示 否则显示佣金     select m nvl(m ) from emp;    nullif(ex ex ):     值相等返空 否则返回第一个值     例 如果工资和佣金相等 则显示空 否则显示工资     select nullif(sal m) sal m from emp;    coalesce:       返回列表中第一个非空表达式     select m sal coalesce(m sal sal* ) from emp;    nvl (ex ex ex ) :     如果ex 不为空 显示ex 否则显示ex     如 查看有佣金的雇员姓名以及他们的佣金     select nvl (m ename ) as HaveCommName m from emp;    七 分组函数 max min avg count sum 整个结果集是一个组    ) 求部门 的最高工资 最低工资 平均工资 总人数 有工作的人数 工种数量及工资总和

复制代码 代码如下:      select max(ename) max(sal)      min(ename) min(sal)      avg(sal)      count(*) count(job) count(distinct(job))      sum(sal) from emp where deptno= ;

   带group by 和 having 的分组    )按部门分组求最高工资 最低工资 总人数 有工作的人数 工种数量及工资总和

复制代码 代码如下:         select deptno max(ename) max(sal)     min(ename) min(sal)     avg(sal)     count(*) count(job) count(distinct(job))     sum(sal) from emp group by deptno;

      )部门 的最高工资 最低工资 总人数 有工作的人数 工种数量及工资总和

复制代码 代码如下:         select deptno max(ename) max(sal)     min(ename) min(sal)     avg(sal)     count(*) count(job) count(distinct(job))     sum(sal) from emp group by deptno having deptno= ;

   stddev 返回一组值的标准偏差     select deptno stddev(sal) from emp group by deptno;     variance 返回一组值的方差差     select deptno variance(sal) from emp group by deptno; 带有rollup和cube操作符的Group By     rollup 按分组的第一个列进行统计和最后的小计     cube 按分组的所有列的进行统计和最后的小计     select deptno job sum(sal) from emp group by deptno job;     select deptno job sum(sal) from emp group by rollup(deptno job);     cube 产生组内所有列的统计和最后的小计     select deptno job sum(sal) from emp group by cube(deptno job); 八 临时表    只在会话期间或在事务处理期间存在的表    临时表在插入数据时 动态分配空间

复制代码 代码如下:    create global temporary table temp_dept    (dno number    dname varchar ( ))    on mit delete rows;    insert into temp_dept values( ABC );    mit;    select * from temp_dept; 无数据显示 数据自动清除    on mit preserve rows:在会话期间表一直可以存在(保留数据)    on mit delete rows:事务结束清除数据(在事务结束时自动删除表的数据) 复制代码 代码如下: select MOD( ) from dual     取余 select  trunc( / ) from dual  取整 trunc ( ) = select ceil( / ) from dual          取整 ceil( ) = cha138/Article/program/Oracle/201311/19033

相关参考

知识大全 Oracle数据库基本常用命令汇总

Oracle数据库基本常用命令汇总  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!以下是对Oracl

知识大全 Oracle维护常用SQL语句汇总

Oracle维护常用SQL语句汇总  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  如何远程判断O

知识大全 关于Oracle一些常用脚本的汇总(2)

关于Oracle一些常用脚本的汇总(2)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  碎片检查

知识大全 110个Oracle常用函数的总结

总结归纳:110个Oracle常用函数的总结  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  /*

知识大全 Oracle数据库常用函数(1)

Oracle数据库常用函数(1)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ASCII  返

知识大全 SQL Server和Oracle的常用函数对比

SQLServer和Oracle的常用函数对比  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  数

知识大全 110个oracle常用函数总结(8)

  RATIO_TO_REPORT功能描述该函数计算expression/(sum(expression))的值它给出相对于总数的百分比即当前行对sum(expression)的贡献  SAMPLE下

知识大全 110个oracle常用函数总结(1)

  ASCII  返回与指定的字符对应的十进制数;  SQL>selectascii(A)Aascii(a)aascii()zeroascii()spacefromdual;  AAZEROSP

知识大全 110个oracle常用函数总结(2)

  返回一个数字反余弦值  SQL>selectcosh()fromdual;  COSH()      EXP  返回一个数字e的n次方根  SQL>selectexp()exp()fr

知识大全 oracle与sql的区别(常用函数)

  许多软件公司都理解开发不依赖于特定数据库类型(例如OracleSQLServerDB)的应用程序的重要性它可以让客户们选择自己习惯的平台一般来说软件开发人员都能够识别出他们的负责数据库维护的客户和