十条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

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)='值

猜你在找的Oracle相关文章