Oracle数据库有用函数
有用函数
DECODE
语法例如以下:
DECODE(value, if1, then1, if2,then2,if3,then3, . . . else ) Value 代表某个表的不论什么类型的随意列或一个通过计算所得的不论什么结果。当每一个value值被測试,假设value的值为if1。Decode 函数的结果是then1;假设value等于if2,Decode函数结果是then2;等等。其实,能够给出多个if/then 配对。
假设value结果不等于给出的不论什么配对时。Decode 结果就返回else 。 须要注意的是,这里的if、then及else
都能够是函数或计算表达式。
实例
,'P03','Err')
INSTR
返回要查找字符的位置
CASEWHEN
详见http://www.cnblogs.com/eshizhan/archive/2012/04/06/2435493.html
--简单Case函数
CASE sex
WHEN '1' THEN '男'
WHEN '2' THEN '女'
ELSE '其它' END
--Case搜索函数
CASE
WHEN sex = '1' THEN '男'
WHEN sex = '2' THEN '女'
ELSE '其它' END
decode和case when差别?
decode仅仅能做等值的。case when能够做区间的。使用范围来进行条件区分,decode能做到的,case when也能做到;效率方面,个人认为两者效率差点儿相同。但decode的语法要简单些,但它仅仅能做等值的比較。case when end 能做条件的推断。
http://blog.sina.com.cn/s/blog_6da521f90100tcm4.html
SUBSTR
substr() 函数返回字符串的一部分。
语法:substr(string,start,length)
string - 指定的要截取的字符串。
start - 必需,规定在字符串的何处開始。
正数 - 在字符串的指定位置開始
负数 - 在从字符串结尾的指定位置開始
0 - 在字符串中的第一个字符处開始
length - 可选。指定要截取的字符串长度。缺省时返回字符表达式的值结束前的所有字符。
比如:select substr('abcdefg',3,4) from dual;结果是cdef
select substr('abcdefg',-3,4) from dual;结果efg
Oracle正則表達式函数:
regexp_like、regexp_substr、regexp_instr、regexp_replace
REPLACE
replace(x,y,z)返回值为将串X中的Y串用Z串替换后的结果字符串。若省略Z參数。则将串X中为Y串的地方删除
SELECT REPLACE('JACK and JUE','J','BL') "Changes" FROM DUAL;
Changes
--------------
BLACK and BLUE
样例
有一个列导入的数据应该时‘2011-10-11’的格式,结果导入的数据为‘2011/10/11’格式的,5000多条记录要一条条改基本不可能。 后来想到了replace这个函数,详细使用方法例如以下:
update 表1 t set t.列1=replace((select 列1 from 表1 a where a.主键列=t.主键列) ,'/' , '-' ) 攻克了我们问题。
replace 函数使用方法例如以下:
replace('将要更改的字符串','被替换掉的字符串','替换字符串')
select"PARENTNAME", "MEMBERNAME", "ALIAS"
from (select'Product' parentname,
'ProductTotal' membername,
'产品汇总'alias
from dual)
CONNECT BY
Oracle “CONNECT BY”是层次查询子句。一般用于树状或者层次结果集的查询。其语法是:
[ START WITH condition ]
CONNECTBY [ NOCYCLE ] condition
1. 可用来生成序列
SELECT ROWNUM FROM DUAL CONNECT BY ROWNUM<= 10;
2.可用来实现树状查询
CONNECT BY rownum <= length(p_str))对输入的字符串进行逐个遍历
selectrownumfrom dualCONNECTBYrownum
<=length('qwertyui')
详见http://www.cnblogs.com/lettoo/archive/2010/08/03/1791239.html
RPAD
rpad函数从右边对字符串使用指定的字符进行填充 rpad(string,padded_length,[pad_string])
string 表示:被填充的字符串
padded_length 表示:字符的长度,是返回的字符串的数量,假设这个数量比原字符串的长度要短,rpad函数将会把字符串截取成从左到右的n个字符;
pad_string 是个可选參数,这个字符串是要粘贴到string的右边。假设这个參数未写。lpad函数将会在string的右边粘贴空格。
比如:
rpad('tech', 7); 将返回'tech '
rpad('tech', 2); 将返回'te'
rpad('tech', 8, '0'); 将返回'tech0000'
rpad('tech on the net', 15, 'z'); 将返回 'tech onthe net'
rpad('tech on the net', 16, 'z'); 将返回 'tech onthe netz'
TRUNC
TRUNC函数返回以指定元素格式截去一部分的日期值。
--Oracle trunc()函数的使用方法
/**************日期********************/
1.select trunc(sysdate) from dual --2011-3-18 今天的日期为2011-3-18
2.select trunc(sysdate, 'mm') from dual --2011-3-1 返回当月第一天.
3.select trunc(sysdate,'yy') from dual --2011-1-1 返回当年第一天
4.select trunc(sysdate,'dd') from dual --2011-3-18 返回当前年月日
5.select trunc(sysdate,'yyyy') from dual --2011-1-1 返回当年第一天
6.select trunc(sysdate,'d') from dual --2011-3-13 (星期天)返回当前星期的第一天
7.select trunc(sysdate, 'hh') from dual --2011-3-18 14:00:00 当前时间为14:41
8.select trunc(sysdate, 'mi') from dual --2011-3-18 14:41:00 TRUNC()函数没有秒的精确
/***************数字********************/
/*
TRUNC(number,num_digits)
Number 须要截尾取整的数字。
Num_digits 。
TRUNC()函数截取时不进行四舍五入
*/
9.select trunc(123.458) from dual--123
10.select trunc(123.458,0) from dual--123
11.select trunc(123.458,1) from dual --123.4
12.select trunc(123.458,-1) from dual--120
13.select trunc(123.458,-4) from dual--0
14.select trunc(123.458,4) from dual --123.458
15.select trunc(123) from dual --123
16.select trunc(123,1) from dual--123
17.select trunc(123,-1) from dual--120
一下语句会经经常使用到,相当于不用创建表而能够插入几条数据
Select ‘Jan’ membername,’1月’ name from dual union select ‘Feb’ membername,’2月’ name from dual;
ADD_MONTHS
ADD_MONTHS(d,n)--时间点d再加上n个月
有两个简单样例,以说明"exists"和"in"的效率问题
1) select * from T1 where exists(select 1from T2 where T1.a=T2.a) ;
T1数据量小而T2数据量很大时,T1<<T2 时。1) 的查询效率高。
2) select * from T1 where T1.a in (selectT2.a from T2) ;
T1数据量很大而T2数据量小时,T1>>T2时,2) 的查询效率高。
In适合内外表都非常大的情况,exists适合外表结果集非常小的情况
过使用EXISTS。Oracle会首先检查主查询,然后执行子查询直到它找到第一个匹配项,这就节省了时间。
Oracle在运行IN子查询时,首先运行子查询。并将获得的结果列表存放在一个加了索引的暂时表中。
在运行子查询之前,系统先将主查询挂起,待子查询运行完成,存放在暂时表中以后再运行主查询。
这也就是使用EXISTS比使用IN通常查询速度快的原因。
OVER函数的作用及使用方法
RANK ( ) OVER ( [query_partition_clause]order_by_clause )
DENSE_RANK ( ) OVER ([query_partition_clause] order_by_clause )
可实现按指定的字段分组排序,对于同样分组字段的结果集进行排序,
当中PARTITION BY 为分组字段,ORDER BY 指定排序字段。
over不能单独使用。要和分析函数:rank(),dense_rank(),row_number()等一起使用。
其參数:over(partition by columnname1 order by columnname2)
含义:按columname1指定的字段进行分组排序,或者说按字段columnname1的值进行分组排序。
比如:employees表中,有两个部门的记录:department_id =10和20
select department_id,rank() over(partition by department_idorder by salary) from employees就是指在部门10中进行薪水的排名,在部门20中进行薪水排名。假设是partition by org_id,则是在整个公司内进行排名。
TO_CHAR TO_DATE
to_char和to_date经验分享
㈠比較以下两种写法:
to_char(start_time,'yyyy-mm-ddhh24:mi:ss')='2013-06-06 16:18:30'
和
start_time=to_date('2013-06-06 16:18:30','yyyy-mm-ddhh24:mi:ss')
不论什么时候都推荐使用后者。!
㈡数字转为英文的简单实现
sys@ORCL> selectto_char(to_date('1314','J'),'Jsp') as "I love 1314" from dual;
I love 1314
-----------------------------------
One Thousand Three Hundred Fourteen
TO_CHAR(aDate,'JSP')能够得到一个数字的拼写,比如:
SELECT TO_CHAR(SYSDATE, 'JSP') FROM DUAL;
这条SQL的查询结果是:
TWO MILLION FOUR HUNDRED FIFTY-THREE THOUSAND FIVE HUNDRED NINE
该数字为:20004530509
为什么?
号到aDate这个日期的天数的英文拼写.Cool!
JULIAN日期的范围是公元前4712-01-01到公元9999-01-01.期间的天数是我们可以拼写的最大值,最小值是1.
那么我们要想得到对一个数字的拼写,仅仅要知道这些天数之后的那个日期即可,得到这个日期非常easy:
TO_DATE(aDigital,'J') 当中aDigital就是你要表示的数字.
这样我们得到一个数字的拼写能够这样(比如101):
SELECT TO_CHAR(TO_DATE(101, 'J'), 'JSP') FROM dual
得到的结果是: ONE HUNDRED ONE
㈢一个 to_date 的陷阱
我们能够用to_date函数来构造自己想要的不论什么时间
当省略了HH,MI,SS时。oracle缺省置为0,即:取整到日
当省略了DD时。oracle缺省置为1,即:取整到月
当省略了MM时,oracle会取整到年吗?我们都会惯性的觉得:会。
然,非也!
Oracle不会取整到年,他会取整到当前月!
select to_date('1991','yyyy')from
dual;
结果为1991-6-1
Oracle数据库有用函数的更多相关文章
- Oracle数据库DECODE函数的使用.
decode函数是Oracle数据库独有的. 语法为: decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 例子:select decode(sign(变量1-变量2) ...
- Oracle数据库to_date函数注意事项
使用PL/SQL连接到Oracle数据库服务器,执行一条update语句: update pjnl set transtime = to_date('2015-05-14 12:13:20','yyy ...
- Mysql和Oracle数据库concat()函数
一.函数的使用参数不同 Mysql支持多个字符串拼接: CONCAT(str1,str2,-) Oralce只支持两个字符串的拼接,若想拼接多个字符串可以嵌套使用concat CONCAT(str1, ...
- Oracle数据库--SQL函数
Oracle SQL函数 1.ASCII返回与指定的字符对应的十进制数;SQL> select ascii('A') A,ascii('a') a,ascii('0') zero,ascii( ...
- Oracle数据库常用函数
Oracle常用函数: 20.COS返回一个给定数字的余弦SQL> select cos(-3.1415927) from dual;COS(-3.1415927)--------------- ...
- Oracle 数据库 有用的sql语句
; SELECT to_date('2014-12-01', 'yyyy-mm-dd') + numtodsinterval(rownum , 'day') FROM DUAL CONNECT BY ...
- Oracle数据库的函数
一.字符函数upper和lower (1).upper和lower upper把小写的字符转换成大小的字符 ,lower把大写字符变成小写字符 . select upper('yes') from d ...
- ORACLE 数据库 MOD 函数用法
1.求2和1的余数. Select mod(2,1) from dual: 2能被1整除所以余数为0. 2.MOD(x,y)返回X除以Y的余数.如果Y是0,则返回X的值. Select mod(2,0 ...
- Oracle数据库over函数的使用
转自: https://blog.csdn.net/a1065423444/article/details/75635611 over()函数写法over(partition by expr2 or ...
随机推荐
- logging——日志
导读 很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,log ...
- mac iterm 快捷键
标签 新建标签:command + t 关闭标签:command + w 切换标签:command + 数字 command + 左右方向键 切换全屏:command + enter 查找:comma ...
- LiveScript 函数
The LiveScript Book The LiveScript Book 函数 定义函数是非常轻量级的. 1.(x, y) -> x + y2.3.-> # an empty ...
- 编译安装solr
1, 获取安装包 wget http://download.oracle.com/otn-pub/java/jdk/8u112-b15/jdk-8u112-linux-x64.rpm wget htt ...
- hdu5443 The Water Problem
The Water Problem Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Othe ...
- 九度oj 题目1361:翻转单词顺序
题目描述: JOBDU最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思.例如,“stu ...
- 九度oj 题目1357:疯狂地Jobdu序列
题目描述: 阳仔作为OJ的数据管理员,每一周的题目录入都让其很抓狂,因为题目不是他出的,他控制不了出题的速度……在等题目的时候,阳仔又不敢出去打篮球,所以只能在纸上乱涂乱写,这天,阳仔在纸上写下了这样 ...
- Welcome-to-Swift-23访问控制(Access Control)
访问控制可以限定你在源文件或模块中访问代码的级别,也就是说可以控制哪些代码你可以访问,哪些代码你不能访问.这个特性可以让我们隐藏功能实现的一些细节,并且可以明确的指定我们提供给其他人的接口中哪些部分是 ...
- 【2018.12.17】NOI模拟赛4
题目 WZJ题解 T1 T2 T3 后缀自动机+($parents$ 树)树链剖分 发现有大量子串需要考虑,考虑摁死子串的一端. 首先,这题显然是一道离线题,因为所有的询问都是 $1$ 到 某个数,也 ...
- wireshark推荐书籍
1 wireshark数据包分析实战 有中文版 2 wireshark网络分析 英文版 3 TCP/IP协议栈详解卷一