oracle函数

一、oracle将一个表中的字段值更新到另一个表的字段中

1.update a,b  set a.field1=b.field1,a.field2=b.field2 where a.id=b.id(不支持oracle(已测试),支持mysql(网上资料))

oracle:

2.update a  set (a.field1,a.field2)=(selec b.field1,b.field2 from  B where b.id=a. id) where exists (selec b.field1,b.field2 from  B where b.id=a. id)

3.update (select a.field1,a.field2, b.field1field3,b.field2 field4 from a,b where a.id=b.id) t set t.field1=t.field3,t.field2=field4

二、左补0函数(lpad)

1.select lpad('1',5,'0') from dual

2.select to_char(1,'fm00000') from dual; --返回“00001”

   select to_char(1,'00000') from dual; --返回“ 00001”(返回值前有空格,若无fm,则会在返回串中带有"+"(默认省略)或"-")

   select to_char(-1,'00000') from dual; --返回“-00001”


三、获取指定日期后若干天后的日期列表


SELECT TO_CHAR(TO_DATE('2009-04-1','YYYY-MM-DD')+ROWNUM-1,'YYYY-MM-DD') DAY_ID FROM DUAL CONNECT BY ROWNUM<=trunc(to_date('2009-05-23', 'yyyy-mm-dd')-to_date('2009-04-1', 'yyyy-mm-dd'))+1;

select  to_date( ' 2007/02/26 '  ' yyyy/mm/dd '  +  rownum  -   1   from  user_objects where  rownum  <=   (to_date( ' 2007/03/21 '  ' yyyy/mm/dd ' ) - to_date( ' 2007/02/26 '  'yyyy/mm/dd '  + 1 );

获取月份:
SELECT TO_CHAR(ADD_MONTHS(TO_DATE('2009-03','YYYY-MM'),ROWNUM-1),'YYYY-MM') DAY_ID FROM DUAL CONNECT BY ROWNUM<=months_between (to_date('2010-03', 'yyyy-mm'),to_date('2009-03', 'yyyy-mm'))+1

四、替换空值(nvl)

NVL2(expr1,expr2,expr3)
功能:如果参数表达式expr1值为NULL,则NVL2()函数返回参数表达式expr3的值;如果参数表达式expr1值不为NULL,则NVL2()函数返回参数表达式expr2的值。  
NVL( string1, replace_with)
功能:如果string1为NULL,则NVL函数返回replace_with的值,否则返回string1的值,如果两个参数都为NULL ,则返回NULL。

五、字符串位置查找(inStr)

InStr(string1, string2, start,appearance),下标从1开始

参数分析:

  string1

  源字符串,要在此字符串中查找。

  string2

  要在string1中查找的字符串.

  start_position

  代表string1 的哪个位置开始查找。此参数可选,如果省略默认为1. 字符串索引从1开始。如果此参数为正,从左到右开始检索,如果此参数为负,从右到左检索,返回要查找的字符串在源字符串中的开始索引。

  nth_appearance

  代表要查找第几次出现的string2. 此参数可选,如果省略,默认为 1.如果为负数系统会报错。

示例:

  SELECT instr('syranmo','s') FROM dual; -- 返回 1

  SELECT instr('syranmo','ra',1) FROM dual;  -- 返回 3

  SELECT instr('syran mo','a',1,2) FROM dual;  -- 返回 0(第二次出现a的位置)


六、去掉重复数据,保留最后一条

delete from ZY_RYFYB t where t.id not in (select max(id) from ZY_RYFYB group by zjh,zprq);
delete from ZY_RYFYB t where id in (select id from (select id,row_number() n over(partition by zjh,zprq) from ZY_RYFYB) where n!=1);

、从数据库随机读取数据:

Access:
select top n * from table order by rnd(id)‘id为数据库的自动编号字段

Sql Server:
select top n * from table order by newid()

MySQL:

SELECT * FROM table order by rand() limit  20; 

Oracle:

select * from table order by dbms_random.value()




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值