知识大全 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 Dselect 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数据库基本常用命令汇总 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!以下是对Oracl
Oracle维护常用SQL语句汇总 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 如何远程判断O
关于Oracle一些常用脚本的汇总(2) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 碎片检查
总结归纳:110个Oracle常用函数的总结 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! /*
Oracle数据库常用函数(1) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! ASCII 返
SQLServer和Oracle的常用函数对比 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 数
RATIO_TO_REPORT功能描述该函数计算expression/(sum(expression))的值它给出相对于总数的百分比即当前行对sum(expression)的贡献 SAMPLE下
ASCII 返回与指定的字符对应的十进制数; SQL>selectascii(A)Aascii(a)aascii()zeroascii()spacefromdual; AAZEROSP
返回一个数字反余弦值 SQL>selectcosh()fromdual; COSH() EXP 返回一个数字e的n次方根 SQL>selectexp()exp()fr
许多软件公司都理解开发不依赖于特定数据库类型(例如OracleSQLServerDB)的应用程序的重要性它可以让客户们选择自己习惯的平台一般来说软件开发人员都能够识别出他们的负责数据库维护的客户和