Oracle中碰到的函数和关键字收集
一、时间处理函数
trunc(sysdate) 返回日期
to_date()
to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')
to_number() 转为数字
二、字符串处理函数
substr(bag.serialid, 0, 13) 截取字符串
regexp_substr(i_sBloodSubType, '[^,]+', 1, level) 正则
regexp_replace(i_sBloodSubType, '[^,]+', '')
regexp_like()
instr(b.fullname, '新鲜') 返回要截取的字符串在源字符串中的位置 参数:(源字符串, 目标字符串, 起始位置, 匹配序号)
length()
三、判断
=
!=
>
<
and
or
not
IS NULL
in ('血浆类', '低温沉淀物类')
exists()
coalesce(表达式1,表达式2,...,表达式n),n>=2,此表达式的功能为返回第一个不为空的表达式,如果都为空则返回空值。
nvl(表达式1,表达式2) 为空则取表达式2的值
decode() DECODE(value,if1,then1,if2,then2,if3,then3,...,else)
case when...then.... end 表达式
CASE语句寻找when的优先级是从上到下。再多的when,也只有一个出口,即其中有一个满足了expr就马上退出case,这点需要牢记
四、整合
cursor() 返回{字段名=值,.....} 整个结果集作为某一个字段 仅Oracle可用
五、去重
distinct
六、聚集查询
count()
sum()
max()
min()
avg()
查询聚集函数得到的结果和其他字段,该字段一定要被group by,否则会报错
wm_concat(column) 将字段合并
row_number() over(partition by 列 order by 列 desc) 为什么要用它?其实每次查询都会有一个伪列rownum,只是伪列的顺序是乱的,解决伪列顺序的问题还得使用子查询。所以这里直接用row_number()
group by rollup() grouping() 参考http://blog.itpub.net/519536/viewspace-610995/
实例:
对group_id进行普通的group by操作---按照小组进行分组
SQL> select group_id,sum(salary) from group_test group by group_id;
GROUP_ID SUM(SALARY)
---------- -----------
30 12000
20 8000
40 16000
10 4000
对group_id进行普通的roolup操作---按照小组进行分组,同时求总计
SQL> select group_id,sum(salary) from group_test group by rollup(group_id);
GROUP_ID SUM(SALARY)
---------- -----------
10 4000
20 8000
30 12000
40 16000
40000
以上rollup语句可以翻译成group by union all 语句,为:
select group_id,sum(salary) from group_test group by group_id
union all
select null, sum(salary) from group_test
order by 1;
GROUP_ID SUM(SALARY)
---------- -----------
10 4000
20 8000
30 12000
40 16000
40000
如果显示“1”表示GROUPING函数对应的列(例如JOB字段)是由于ROLLUP函数所产生的空值对应的信息,即对此列进行汇总计算后的结果。
如果显示“0”表示此行对应的这列参未与ROLLUP函数分组汇总活动。
having子句 一般是同group by一起使用的,用来筛选聚合后的结果
七、结果联合
union 可能有重复值,且需要去重的时候使用,否则会浪费去重的查询资源
union all 不需要去重的时候使用
with as 把一大堆重复用到的sql语句放在with as里面,取一个别名,后面的查询就可以用它
八、左右连接另一种写法
h.operator=op.id(+) 右连接
h.operator(+)=op.id 左连接
九、将结果集转为xml形式返回
dbms_xmlgen 用户处理xml格式 sys_refcursor 用来接收结果集 sysdate 系统时间
oracle 10g中,有两个包,用于处理xml格式: dbms_xmlgen 和 dbms_xmlstore.
更多dbms参考 http://docs.oracle.com/cd/B19306_01/appdev.102/b14258/d_xmlgen.htm#i1010859
2.使用dbms_xmlgen生成数据表的xml格式
declare
xmlhdl dbms_xmlgen.ctxtype;
line varchar2(200);
xmltext varchar2(32767);
begin
-- create ctxhandle
xmlhdl := dbms_xmlgen.newcontext('select * fromxmldemo');
--generate xml format data into clob
xmltext :=dbms_xmlgen.getxml(xmlhdl);
--display the xml content
loop
exit when xmltext is null;
line :=substr(xmltext,1,instr(xmltext,chr(10))-1);
dbms_output.put_line(line);
xmltext :=substr(xmltext,instr(xmltext,chr(10))+1);
end loop;
--close ctxhandle
dbms_xmlgen.closecontext(xmlhdl);
end;
3.dbms_xmlgen其它函数
getnumrowsprocessed(xmlhandle):=getxml所处理的实际行数
dbms_xmlgen.setMaxRows(xmlhdl,10):=允许处理最大行数
dbms_xmlgen.setrowsettag(xmlhdl,'Packet'):=重置行集标签rowset
dbms_xmlgen.setrowtag(xmlhdl,'Record'):=重置行标签row
dbms_xmlgen.setnullhandling(xmlhdl,2):=列空值如何表示,如:<A/>
实例:
function queryBloodIn(i_sHandoverId in varchar2) return clob as
res clob;
-- 和 dbms_xmlgen.ctxtype 结果一样
ctx dbms_xmlgen.ctxHandle;
-- declare result set 申明结果集
refcur sys_refcursor;
begin
-- 将查询结果保存到结果集
OPEN refCur FOR
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as time,
substr(bag.serialid, 0, 13) as serialid,
b.shortname as bloodname,
bst.name as bloodsubtype
from pm_handover h,pm_handoverdetail hd,bloodbag bag,d_blood b,d_bloodsubtype bst
where h.id=i_sHandoverId
and h.type in (2, 102, 152)
and hd.handoverid=h.id
and (h.accepttime > trunc(sysdate) or exists(select null from pm_store s where s.bloodbagid = hd.bloodbagid and s.status in ('Processing', 'Producing')))
and hd.bloodbagid=bag.id
and bag.bloodid=b.id
and b.subtype=bst.id;
-- get Handle 得到处理对象
ctx:=dbms_xmlgen.newContext(refCur);
-- 空值处理
dbms_xmlgen.setNullHandling(ctx,dbms_xmlgen.EMPTY_TAG);
-- 设置列名作为标签名
dbms_xmlgen.useItemTagsForColl(ctx);
-- 得到xml结果
res:=dbms_xmlgen.getXML(ctx);
-- 关闭上下文
dbms_xmlgen.closeContext(ctx);
RETURN res;
end;
Oracle中碰到的函数和关键字收集的更多相关文章
- Oracle中的单行函数
Oracle中的单行函数 1 字符函数 UPPER()--将字符串转换为大写 SELECT UPPER('abc') FROM dual; LOWER()-将字符串转换为小写 SELECT LOWER ...
- Oracle中 Instr 这个函数
http://www.jb51.net/article/42369.htm sql :charindex('字符串',字段)>0 charindex('administrator',MUserI ...
- 创建类似于Oracle中decode的函数
-- 创建类似于Oracle中decode的函数create or replace function decode(variadic p_decode_list text[])returns text ...
- Oracle中的substr()函数 详解及应用
注:本文来源于<Oracle中的substr()函数 详解及应用> 1)substr函数格式 (俗称:字符截取函数) 格式1: substr(string string, int a, ...
- MySQL之实现Oracle中的rank()函数的功能
假设表格为student, 数据如下: 我们要在MySQL中实现Oracle中的rank()函数功能,即组内排序,具体来说: 就是对student表中按照课程(course)对学生(name) ...
- oracle中的trim()函数详解
1.先看一下Oracle TRIM函数的完整语法描述 TRIM([ { { LEADING | TRAILING | BOTH }[ trim_character ]| trim_character} ...
- oracle中的greatest 函数和 least函数
oracle中的greatest 函数和 least函数 原文地址:https://blog.csdn.net/sinat_32023305/article/details/78778596 g ...
- 问题:oracle nvl;结果:Oracle中的NVL函数
Oracle中的NVL函数 (2012-11-30 13:21:43) 转载▼ 标签: nvl oracle 分类: Oracle Oracle中函数以前介绍的字符串处理,日期函数,数学函数,以及转换 ...
- Oracle中的转换函数
Oracle中的转换函数有三个,分别为to_char(),to_date(),to_number() 1.to_char()的用法 格式化当前的日期时间 select sysdate,to_char( ...
随机推荐
- 【转】JavaScript 之arguments、caller 和 callee 介绍
1.前言 arguments, caller , callee 是什么? 在JavaScript 中有什么样的作用?本篇会对于此做一些基本介绍. 本文转载自:http://blog.csdn.ne ...
- .dll 无法查找或者打开PDB文件
https://www.baidu.com/link?url=XBkzyMPU8bmyHSKAvBde6955fX2ecFJXfk8D44_VCuH_4U04E0bHFjk8D2_mXSqgjcUyQ ...
- 解决Antimalware Service Executable CPU占用高听语音
windows8/8.1,WIN10自带的安全软件Windows defender还不错,基本可以不用装其他杀毒软件了. 但是其进程Antimalware Service Executable 出现C ...
- 3.WP8.1开发_为控件增加动画
示例: 把一个按钮的宽度从100变到500 根据WPF的经验,会把代码写成如下: <Grid> <Button x:Name="btn" Content=&quo ...
- JSON与JAVA的数据转换
http://developer.51cto.com/art/200906/129090.htm java.lang.ClassNotFoundException: net.sf.json.JSONA ...
- maven修改远程和本地仓库地址
简介:我们用maven的时候,maven自带的远程中央仓库经常会很慢,还有默认本地仓库是在c盘C:\Users\你的电脑用户账号\.m2\repository, 对于有强迫症的人,总是看的不爽,下面介 ...
- Linux批量清理多个文件内容而不删除文件
清理单个文件,可以这样:echo > myLog.log 但是,如果我要清理一堆文件,比如在/logs目录下面的所有以.log结尾的文件的内容,而不删除文件,该如何操作呢? 我一开始的语句是这样 ...
- Android -- 自定义ViewGroup+贝塞尔+属性动画实现仿QQ点赞效果
1,昨天我们写了篇简单的贝塞尔曲线的应用,今天和大家一起写一个QQ名片上常用的给别人点赞的效果,实现效果图如下: 红心的图片比较丑,见谅见谅(哈哈哈哈哈哈).... 2,实现的思路和原理 从上面的效果 ...
- XJOIWinterCampPrecontest1-P2队列
2 排队2.1 题目有n 个人打水,第i 个人打水需要ai 的时间.有K 个水龙头,你可以随意安排他们打水的顺序以及使用哪一个水龙头,但是每一时刻每一个水龙头只能有一个人使用且一个人一旦开始打水就不能 ...
- 【Egret】Wing3发布移动APP功能,打包APK流程以及会遇到的问题
流程:1.安装好wing 3,然后 插件--Egret项目工具--发布移动APP--Build android native project 2.配置发布环境: Android 1.egret eng ...