在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)='值
总结
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。