1.去掉空格,替换
replace
REPLACE (’CAT CALL’, ‘C’) ==> ‘AT ALL’
REPLACE (’Zero defects in period 99 reached 99%!’, ‘99′, ‘100′) ==> ‘Zero defects in period 100 reached 100%!’
REPLACE (’this that and the other’, ‘th’, ‘z’) ==> ‘zis zat and ze ozer’
translate
TRANSLATE (’abcd’, ‘ab’, ‘12′) ==> ‘12cd’
TRANSLATE (’12345′, ‘15′, ‘xx’) ==> ‘x234x’
TRANSLATE (’grumpy old possum’, ‘uot’, ‘%$*’) ==> ‘gr%mpy $ld p$ss%m’
TRANSLATE (’my language needs the letter e’, ‘egms’, ‘X’) ==> ‘y lanuaX nXXd thX lXttXr X’;
TRANSLATE (’please go away’, ‘a’, NULL) ==> NULL
trim
Oracle中的trim函数是用来删除给定字符串或者给定数字中的头部或者尾部的给定字符。
trim函数具有如下的形式
trim([leading/trailing/both][匹配字符串或数值][from][需要被处理的字符串或数值])
这里如果指明了leading表示从删除头部匹配的字符串,如果指明了trailing表示从删除尾部匹配的字符串,如果指明了both,或者不指明任何位置,则两端都将被删除
如果不指明任何匹配字符串或数值则认为是空格,即删除前面或者后面的空格。
trim函数返回的类型是varchar2
下面是一些例子:
截去了数字7500的后面的两个0
SQL> select trim(0 from 7500) from dual;
TRIM
—-
75
下面的例子截去了’ 中秋八月中’前后的两个’中’字
SQL> select trim(’中‘ from ‘中秋八月中‘) as 诗 from dual;
诗
——————
秋八月
下面的例子截去了’ 半夜二更半’前面的一个’半’字
SQL> select trim(leading ‘半‘ from ‘半夜二更半‘) as 诗 from dual;
诗
————————
夜二更半
小注:当trim,replace等函数无法去掉空格时,其中肯定是有tab键等等,tab键,回车、换行、空格的ASCII代码分别是,9,13、10、32,
用法 replace(FieldName,chr(9),'')
2.返回字符串出现的索引
在oracle PL/SQL中,instr函数返回string2在string1中出现的位置,语法如下:
instr(string1,instring2[,start_position[,nth_appearance]])
string1:被搜索的字符串
string2:在string1里面寻找的字符串
start_position:从string1中开始搜索的位置,这是个可选参数,默认为1。
sting1中第一个字符的位置为1。如果这个参数为一个负数,那么搜索将从string1的末尾开始,并向string1的开始位置进行搜索。
nth_appearance:string2在string1中出现的次数,这是一个可选参数,默认值为1.
注意:如果string2未在string1中出现,那么instr函数的返回值为0。
实例
1.从起始位置开始搜索,第一次出现子串的位置
SQL> select instr('chen_linbo_bobo12082119','bo',1,1) from dual;
INSTR('CHEN_LINBO_BOBO12082119
------------------------------
9
SQL> select instr('chen_linbo_bobo12082119','bo') from dual;
INSTR('CHEN_LINBO_BOBO12082119
------------------------------
9
2.从后往前搜索,第二次出现子串的位置
SQL> select instr('chen_linbo_bobo12082119','bo',-1,1) from dual;
INSTR('CHEN_LINBO_BOBO12082119
------------------------------
14
SQL> select instr('chen_linbo_bobo12082119','bo',-1) from dual;
INSTR('CHEN_LINBO_BOBO12082119
------------------------------
14
3.从指定位置开始搜索
SQL> select instr('chen_linbo_bobo12082119','bo',7,3) from dual;
INSTR('CHEN_LINBO_BOBO12082119
------------------------------
14
SQL> select instr('chen_linbo_bobo12082119','bo',10,3) from dual;
INSTR('CHEN_LINBO_BOBO12082119
------------------------------
0
3.大小写转换
lower、Upper
select lower(user_name) from user
将 user表里的user_name字段信息中含有字母的全部转成大写的方法:
update user set user_name=Upper(user_name)
同理得到将 user表里的user_name字段信息中含有字母的全部转成小写的方法:
update user set user_name=lower(user_name)
NVL
格式为:NVL( string1, replace_with) 功能:如果string1为NULL,则NVL函数返回replace_with的值,否则返回string1的值。 注意事项:string1和replace_with必须为同一数据类型,除非显示的使用TO_CHAR函数。 例:NVL(TO_CHAR(numeric_column), 'some string') 其中numeric_column代指某个数字类型的值。 例:nvl(yanlei777,0) > 0 NVL(yanlei777, 0) 的意思是 如果 yanlei777 是NULL, 则取 0值 通过查询获得某个字段的合计值,如果这个值为null将给出一个预设的默认值
4.截取
substr( string, start_position, [ length ] )
substr('This is a test', 6, 2) would return 'is'
substr('This is a test', 6) would return 'is a test'
substr('TechOnTheNet', -3, 3) would return 'Net'
substr('TechOnTheNet', -6, 3) would return 'The'
select substr('This is a test', 7) from dual;
oracle 中 字符串从1开始,例1中从第6个字符串开始,包括第6
但是select substr('This is a test', 0) from dual,还是截取的全部
5.获取长度
length(p_str);
6.decode
select sid,
decode(kcbm,
’语文’,100,
'数学',90,
'英语',59
100) grade
from stud
order by sid;
7.add_months(time,months)
select add_months(sysdate,-6) from dual;
该查询的结果是当前时间半年前的时间
select add_months(sysdate,6) from dual;
该查询的结果是当前时间半年后的时间
8.行字符串相加
wm_concat(column)函数
u_id goods num
1 苹果 2
2 梨子 5
1 西瓜 4
3 葡萄 1
3 香蕉 1
1 橘子 3
想要的结果为:
u_id goods_sum
____________________
1 苹果,西瓜,橘子
2 梨子
3 葡萄,香蕉
---------------------------------
select u_id, wmsys.wm_concat(goods) goods_sum from shopping group by u_id