`

常用sql

 
阅读更多

1.NVL(c1,c2) 判断如果C1是NULL,返回C2的值。

update T_1 set C_JH=NVL(C_JH,'13A3'),ZH=NVL(ZH,'BJSS') where ID= '123'

 2.单引号 ,转义

单引号有两个作用,一是字符串是由单引号引用 。当字段C_REG中存储的内容是

RZLX IN ('NSMC') 时,需要修改内容为RZLX IN ('NSMC','NC')  因为有引号所以要进行转义

replace(c_reg,'''NSMC''','''NSMC'',''NC''')  ,'''NSMC''' 第一个和最后一个单引号是用来包裹要搜索的字符串 'NSMC’的,第二个是对第三个单引号的转义,第4个是对第5个单引号的转义。即从第二个单引号开始被视为转义符向后找最近的单引号进行转义,后面的类似。

如果单引号多少,用上面方式就复杂了,可使用q'{}'将需要转义的字符串放到两个大括号之间的方法达到目的

replace(c_reg,q'{'NSMC'}',q'{'NSMC','NC'}')

3.instr

 update T_1 set zdjh=substr(zdjh,3)  where instr(zdjh,'00',1,1)=1

 INSTR('CORPORATE FLOOR','OR', 3, 2)中,源字符串为'CORPORATE FLOOR', 在字符串中查找'OR',从第三个字符位置开始查找"OR",取第三个字后第2个匹配项的位置。

substr:取得字符串中指定起始位置和长度的字符串   substr( string, start_position, [ length ] )

 

4.用B表字段的值,修改A表中的某个字段

update B set b.name=(select A.name from A where A.id=B.recId );

update B set b.xmmc=a.BT from B b,A a where a.id=b.xmid 

 5.查询中的中括号问题

先转义下然后用 ESCAPE   '/'

select * from T where wh like '%/[1997/]%' ESCAPE '/' order by no 

或者 左中括号用一对中括号括住,而右中括号不必处理

select * from T where wh like '%[[]1997]%' order by no

6.补充位数 lpad ,rpad

select lpad(c_no,8,'0') from a  将c_no字段不足8位的在左侧补0,

select rpad(c_no,8,'0' from a 将c_no字段不足8位的在右侧补0,

也可以用decode 但麻烦点

select decode(length(c_no),1,'000',2,'00',3,'0)||c_no from dual  //判断c_no的长度,如果长度为1则左侧补3个0,长度为2 左侧补2个0 ,长度为3补一个0.

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics