oracle sql 前十条,十条Oracle不常用但很实用的SQL语句总结

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

1选择前5行的内容.

select*fromdq_S2_S2whererownum<=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型的转化

selectto_date(substr(start_time,1,10),'yyyy-mm-dd')fromtable

或者

selectto_date(to_char(sysdate,'yyyy-mm-dd'),'yyyy-mm-dd')fromdual

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,'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

--去前后空格select trim(--1 1

--去前后中空格selectreplace(' aa kk ',' ',0)">'') 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),0)">'');

--去掉回车13),monospace; font-size:14px; line-height:20.3px; white-space:pre">--去掉空格set t.add_administration_num=trim(t.add_administration_num);

8.字符串截取split

selectcolumn_valueasemployeefromtable(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=1and (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、付费专栏及课程。

余额充值