在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',','))
结果为