oracle数据库中的相关积累(持续更新)

nvl2(exp1,exp2,exp3)  虑空函数
检测表达式exp1,exp1不为空时值为exp2,空时为exp3
NVL2(表达式,不为空设值,为空设值)
 
小数转为百分数
select to_char(round(0.1*100,3),‘990.99‘) || ‘%‘ from dual
其中0.1为要转换的小数
添加虑空后
select to_char(round(nvl2(‘null‘,‘1‘,‘0‘)*100,3),‘990.99‘) || ‘%‘ from dual
 
类似if..else 的语句
case exp1 when … then value1…..end
decode(exp1,’key1’,’value1’, ’key2’,’value2’,’其他’)
oracle中发现的执行效率问题:
 
对于2条sql:
sql1:  select count(1) from v_ryxssj t where to_char(t.JZRQ,‘yyyy-MM-dd‘)=‘2015-03-31‘
 
sql2:  select count(1) from v_ryxssj t where t.JZRQ=to_date(‘2015-03-31‘,‘yyyy/MM/dd‘);
 
数据量不小的时候,查询的速度差距很大
sql1用时31s,sql2用时1s
总结:尽量不要改变数据库中字段
 
 
关于时间的转换问题:
 
效率较高的是时间字段以数据库中的为基准。
数据中字符串型20140406,那么sql写为这样:
select * from sale_task r where r.task_end_date>=’20140406’;
 
注意:oracle中的日期为字符串时,是可以互相比较的。
 
转为timestamp格式to_timestamp() 和to_timestamp_tz
 
数据库中为    20-3月 -15 07.23.18.794000 下午
select * from task_split_record r where r.split_time>=to_timestamp(‘2014‘,‘yyyy‘) and  r.split_time<=to_timestamp_tz(‘2015‘,‘yyyy‘);
这句是查询2015年的数据
 
又比如:to_timestamp_tz(‘2015/04/01 11:55:10‘,‘yyyy/mm/dd HH24:MI:SS‘)
http://blog.csdn.net/csh602583095/article/details/32130967
时间: 2024-08-02 08:55:37

oracle数据库中的相关积累(持续更新)的相关文章

X86&Windows 相关链接....持续更新中....

链接说明 链接 备注 qboot是一个小型快速的Bios https://github.com/bonzini/qboot SeaBois是Bochs使用的Bois http://www.seabios.org/Releases#SeaBIOS_1.8.0 X86&Windows 相关链接....持续更新中....

Oracle数据库中的blob类型解析

Oracle的Blob字段比较特殊,他比long字段的性能要好很多,可以用来保存例如图片之类的二进制数据. 写入Blob字段和写入其它类型字段的方式非常不同,因为Blob自身有一个cursor,你必须使用cursor对blob进行操作,因而你在写入Blob之前,必须获得cursor才能进行写入,那么如何获得Blob的cursor呢? 这需要你先插入一个empty的blob,这将创建一个blob的cursor,然后你再把这个empty的blob的cursor用select查询出来,这样通过两步操作

oracle数据库中exp/imp之初次使用

最近使用oracle9i时,遇到了数据库备份和恢复的问题,很多时候与exp和imp的命令使用有关.针对遇到的问题,简单的总结. 问题的背景,就是需要对某张表导入和导出.数据库database1,dateabase2在数据库中涉及的用户主要是 user1,user2,备份的对象主要是表table1. 对于exp和Imp命令的内容网上较多的解说,这里主要解决具体的问题,使用的只是常用的命令项. 1.从database2中导出表 table1 exp userid=system/[email prot

解决getJdbcTemplate往oracle数据库中插入数据返回主键出错问题

我们使用Spring中的JdbcDaoSupport往Mysql中插入数据并返回主键代码,我们使用的mysql数据库,主键在数据库中设置为自增长:该类继承自JdbcDaoSupport,所以能直接使用getJdbcTemplate() public int saveUser(String userName,int age,String password){ getJdbcTemplate().update(new PreparedStatementCreator() { public Prepa

android点滴之触控相关知识点(持续更新)

1.检查当前屏幕有多少个触摸点. 使用MotionEvent的getPointerCount()方法. 2.多点触控下,触摸的状态的检测 MotionEvent类中方法getActionMasked(),这个方法可以检查触摸的状态: 当只有一个触摸点时(只用一根手指触摸屏幕),按下是0,起来是1,移动是2: 当触摸点多于1时(多根手指触摸屏幕),按下是5,起来是6,移动是2: 3.多点触控下,每个触点的分类处理 多点触摸时 假如是第i个点 int x = event.getX(i); int y

Oracle数据库中闪回恢复的详细分析

Oracle9i开始提供闪回查询,以便能在需要的时候查到过去某个时刻的一致性数据,这是通过Undo实现的.这个功能有很大的限制,就是相关事务的undo不能被覆盖,否则就无力回天了.oracle10g大大的增强了闪回查询的功能,并且提供了将整个数据库回退到过去某个时刻的能力,这是通过引入一种新的flashback log实现的. flashback log有点类似redo log,只不过redo log将数据库往前滚,flashback log则将Oracle数据库往后滚.为了保存管理和备份恢复相

如何处理Oracle数据库中的坏块问题

本文主要介绍如何去处理在Oracle数据库中出现坏块的问题,对于坏块产生在不同的对象上,处理的方法会有所不同,本文将大致对这些方法做一些介绍.因为数据库运行时间长了,由于硬件设备的老化,出现坏块的几率会越来越大,因此,做为一个DBA,怎么去解决数据库出现的坏块问题就成了一个重要的议题了. 一:什么是数据库的坏块   首先我们来大概看一下数据库块的格式和结构 数据库的数据块有固定的格式和结构,分三层:cache layer,transaction layer,data layer.在我们对数据块进

给Oracle数据库中CLOB字段插入空值

遇到往ORACLE数据库中插入数据时总是报ORA-01084 invalid argument in OCI call错误,经分析是因为表中的一个字段类型为CLOB,并且可为空,当在给该字段插入空值时引发的该错误.后来判断是否为空值,如果为空值使用DBNull.Value,以此解决了该问题. Null 指的是无效的对象引用:而 DBNull 是一个类, DBNull.Value 是它唯一的实例 .DBNull 的实例 DBNull.Value是数据库表中的空数据在 .Net 代码中的表现形式.我

oracle数据库中提供的5种约束

约束作用:用来保持数据的完整性,防止无效数据进入到数据库中.oracle数据库中提供的5种约束,都是限定某个列或者列的组合的.1.主键约束(PRIMARY KEY):在一个表中能唯一的标识一行.主键可以限定在多个列上.2.唯一键约束(UNIQUE key):在一个表中能唯一的标识一行,唯一键也可以限定在多个列上.主键和唯一键的区别:a.一个表中最多只能有一个主键.可以多个唯一键.b.主键所限定的列不能为null,唯一键所限定的列可以为null.3.外键约束(FOREIGN key):   引用表