十条Oracle不常用但很实用的SQL语句总结

在Oracle中经常会遇到一些不常用到,但是却很实用的小语句。偏偏这些语句你在网上还一时半会儿的查不到。所以我把我知道或者遇到的都总结一下。不断更新中,常用Oracle的朋友可以收藏一下。


1选择前5行的内容.


select * from dq_S2_S2 where rownum <= 5   

选择其中几行的内容

select date_time from ( select  date_time, row_number() over ( order by date_time ) rn from dq_S2_S2) where rn between  3 and 4;


2.Date型与String型的转化


select to_date(substr(start_time,1,10),'yyyy-mm-dd'from table

或者

select to_date(to_char(sysdate,'yyyy-mm-dd'),'yyyy-mm-dd') from dual 


3.对时间的加减算法


sysdate - interval '7' year   当前时间减去7年

sysdate - interval '7' hour  当前时间减去7小时

例如:select trunc(sysdate,'hh24')- interval '1' hour from dual


4.update接select语句


update接select语句最难的在于加where条件,如果是update的正好是select出来的全部,那么简单极了,但是当有多条select语句,必须要查询出来有其他内容,然后在用其他内容做判断的话就很复杂了。下面单独给出一个例子,感觉妙就妙在where语句明明是select的字句 但是却必须在update中才能运行,否则会报错~各位有兴趣不妨体验一下。

update DQ_CQXXB2 x set(x.fwrdj,x.fsj2) 
= (select case fwrdj when '-9999' then '9' else fwrdj end  fwrdj,fsj2 from
(select * from 
(select pm25_level fwrdj,'神州区' STATIONNUMBER,DATETIME fsj2 from  TB_MAPDATA where DATETIME = trunc(sysdate,'hh24') and STATIONNUMBER in(900))union
(select pm25_level fwrdj,'地球村' STATIONNUMBER ,DATETIME fsj2 from  TB_MAPDATA where DATETIME = trunc(sysdate,'hh24') and STATIONNUMBER in(915))
)z where z.STATIONNUMBER = x.fcqmc) 


5.在没有merge into 的情况下实现有则更新,没则新建

UPDATE table SET field='C', field2='Z' WHERE id=3;
INSERT INTO table (id, field, field2) SELECT 3, 'C', 'Z' WHERE 1 NOT IN (SELECT 1 FROM table WHERE id=3);


6.去空格

--去前空格select ltrim(' 1 1 ') aa from dual;--1 1  

--去后空格select rtrim(' 1 1 ') aa from dual;-- 1 1

--去前后空格select trim(' 1 1 ') aa from dual;--1 1

--去前后中空格selectreplace(' aa kk ',' ','') abcdfrom dual;--aakk


7.去回车符、换行符、空格符

大家首先要知道的是:制表符 chr(9) 、换行符 chr(10) 、回车符 chr(13)

--去除换行update zhzl_address t set t.add_administration_num=replace(t.add_administration_num,chr(10),'');

--去掉回车update zhzl_address t set t.add_administration_num=replace(t.add_administration_num,chr(13),'');

--去掉空格update zhzl_address t set t.add_administration_num=trim(t.add_administration_num);


8.字符串截取split

select column_value as employee fromtable(splitstr('BGI5819,BGI11625,BGI11150,BGI11273,BGI7987',','))

结果为



9.order by having的用法

其实having的用户和where的用法在select时是一样,都是加限制条件,但是区别是where是搜索前过滤,having是在order by分好组之后过滤。
这样考虑的话就要分为两种情况:
1.分组不影响所要过滤的列,或者说所要过滤的列不需要分组。这种情况当然having和where是一样的了,不过从效率上来说,推荐where,因为having毕竟是首先要进行总体的排序。
2.所要过滤的列首先需要分组才能获得。这种情况就只能用having了。

10.Where 语句后面加上case when语句

话不多说 直接上实例
select * from 表
where 1=1
and (case when a=1 then a when 表.字段='asdfasdf' then b end)='值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值