常用的字符串函数:
SQL> select instr('Hello World!','o',1,1),instr('Hello World!','o',1,2),instr('Hello World!','o',6,2) from dual;
INSTR('HELLOWORLD!','O',1,1) INSTR('HELLOWORLD!','O',1,2) INSTR('HELLOWORLD!','O',6,2)
---------------------------- ---------------------------- ----------------------------
5 8 0
SQL> select substr('Hello World!',1,4),substr('Hello World!',3,4) from dual;
SUBSTR('HELLOWORLD!',1,4) SUBSTR('HELLOWORLD!',3,4)
------------------------- -------------------------
Hell llo
SQL> SELECT TRANSLATE('as f as f as bbdd', ' afb', '*?@') FROM DUAL;
TRANSLATE('ASFASFASBBDD','AFB'
------------------------------PS:每个字符匹配替换
?s*@*?s*@*?s*dd
SQL> SELECT REPLACE('as f af af as', 'af', 't') FROM DUAL;
REPLACE('ASFAFAFAS','AF','T')
-----------------------------PS:字符串匹配替换
as f t t as
SQL> select lpad('aaa',10,'#') from dual;
LPAD('AAA',10,'#')(默认为空格)
------------------
#######aaa
SQL> select rpad('aaa',10,'#') from dual;
RPAD('AAA',10,'#')(默认为空格)
------------------
aaa#######
ltrim(字符串1,字符串2) 和rtrim(字符串1,字符串2)
PS:从字符串1的左端开始扫描,逐一去掉在字符串2中出现的字符,当遇到不是字符串2中的字符终止,返回结果集.
SQL> select ltrim('morning','m'),ltrim('morning','or') from dual;
LTRIM('MORNING','M') LTRIM('MORNING','OR')
-------------------- ---------------------
orning morning
SQL> select rtrim('morning','m'),rtrim('morning','ng') from dual;
RTRIM('MORNING','M') RTRIM('MORNING','NG')
-------------------- ---------------------
morning morni
SQL> select trim('a' from 'abcaa') from dual;
TRIM('A'FROM'ABCAA')
--------------------PS:截取的字符集(蓝色部分)只能为一个字符
bc
SQL> select initcap('huang-kai-bin') from dual;
INITCAP('HUANG-KAI-BIN')
------------------------
Huang-Kai-Bin
SQL> select length('hello world') from dual;
LENGTH('HELLOWORLD')
--------------------
11
SQL> select upper('Hello World') from dual;
UPPER('HELLOWORLD')
-------------------
HELLO WORLD
SQL> select lower('Hello World') from dual;
LOWER('HELLOWORLD')
-------------------
hello world
SQL> select concat('Hello',' World') from dual;
CONCAT('HELLO','WORLD')
-----------------------ps:效果和字符串连接符 || 相同
Hello World
写了一个简单的过程,把一个分段记录插入表中:
在这个过程中,用到了两个字符串的函数:
1.SUBSTR(目标字符串,输出的子串的起点,子串的长度)
如:select substr(ssn,1,3)|| ','||substr(ssn,4,2)||','||substr(ssn,6,4);
输出: ssn ssn
300541117 变成 300-54-1117
2.INSTR(目标字符串,匹配的内容,搜索起点,第几个满足条件)
如:select lastname,instr(lastname,'o',2,1) from characters;
输出: lastname instr(lastname,'o',2,1)
purvis 0
kong 2
create or replace procedure p_hyj_hkb_test is
v_in_string varchar2(10000);
v_post number(4);
v_out_string varchar2(5000);
v_cn number(1);
create_table varchar2(500);
v_name varchar2(20);
v_age number(2);
v_address varchar2(100);
i number(2);
v_in_string2 varchar2(10000);
--v_post2 number(4);
begin
begin
select count(*)
into v_cn
from user_tables a
where a.table_name = 'USER_INFO';
if v_cn = 0 then
--表不存在,建立
create_table := 'create table user_info(name varchar2(15),
age number(6),
address varchar2(100))';
execute immediate create_table;
else
--表存在
null;
end if;
end;
begin
--把串'黄开彬,25,福建省福州市闽清,'写到一个表里,字段要按user_name,age,address这三个字段来保存
v_in_string := '黄开彬,25,福建省福州市闽清县;黄依江,30,福建省福州市;小黄,35,福建省垃圾的;';
while instr(v_in_string, ';', 1) > 0 loop
if v_in_string is null then
goto end_loop;
end if;
v_post := instr(v_in_string, ';', 1);
v_in_string2 := substr(v_in_string, 1, v_post - 1)||',';
v_in_string := substr(v_in_string, v_post + 1);
i := 1;
while instr(v_in_string2, ',', 1) > 0 loop
if v_in_string2 is null then
goto end_loop;
end if;
v_post := instr(v_in_string2, ',', 1);
v_out_string := substr(v_in_string2, 1, v_post - 1);
v_in_string2 := substr(v_in_string2, v_post + 1);
if i = 1 then
v_name := v_out_string;
elsif i = 2 then
v_age := v_out_string;
elsif i = 3 then
v_address := v_out_string;
end if;
i := i + 1;
end loop;
--插入表
begin
-- insert into user_info values (v_name, v_age, v_address);
create_table := 'insert into user_info values(' || '''' || v_name || '''' || ',' || '''' ||
v_age || '''' || ',' || '''' || v_address || '''' || ')';
execute immediate create_table;
end;
end loop;
end;
<<end_loop>>
null;
end p_hyj_hkb_test;