重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
首先,看你是想导出成文本,还是直接插表里
成都创新互联-专业网站定制、快速模板网站建设、高性价比敦煌网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式敦煌网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖敦煌地区。费用合理售后完善,十多年实体公司更值得信赖。
要是导出的话,用spool就行
你那个试试,用下面三句
spool e:\log.txt; (当然随便放什么地方,起什么名,路径对了就行)
select bif_code||','||name||';' from bis_bif_init;
spool off;
然后你去路径哪里找那个log.txt,里面就是你说那格式的,这格式可以调整
你要想放表里也行中间那句可以换成
select 'insert into bis_bif_init( 新列名 ) values(' ||bif_code|| ',' || name || ') where xxx;' from bis_bif_init;
就是说格式自己定,''中想加啥加啥用||连起来就行。同样去找txt,格式就是你定的那样。
-------------------------------------------------------------------------------------------
这是一种txt的,还有一个,如果你想在这个表的新列里直接显示加逗号那个格式的,也可以。就不用txt了,下次直接导出该列就行。但需要在表里加个列
alter table BIS_BIF_INIT add xxx(新列名字) char(100) generated always as (bif_code||','||name);
然后表里就有这个拼好的列,可能字符会很多,定大点
------------------------------------------------------------------------------------
最后一种,直接建个视图得了,省事,就一句话
create view vie_bis_bif_init as bif_code||','||name||';' from bis_bif_init;
用正则表达式,应该能解决你的问题
例子,供参考,具体稍作调整
select regexp_substr('01 a;02 b;03 c;04 d', '[^;]+', 1, level)
from dual
connect by level = regexp_count('01 a;02 b;03 c;04 d', '[^;]+')
先在数据库里写一个 split 函数,然后
select s,count(s)
from
(select str_split (special_equipment,'/') s from table )
group by s
order by s
下面 是 split 函数 可以 试试, 但不一定适合,自己可以改改
CREATE OR REPLACE TYPE str_split_array IS TABLE OF VARCHAR2 (4000);
CREATE OR REPLACE FUNCTION str_split (p_str IN VARCHAR2, p_delimiter IN VARCHAR2)
RETURN str_split_array
IS
j INT := 0;
i INT := 1;
len INT := 0;
len1 INT := 0;
str VARCHAR2 (4000);
split_array str_split_array := str_split_array ();
BEGIN
len := LENGTH (p_str);
len1 := LENGTH (p_delimiter);
WHILE j len
LOOP
j := INSTR (p_str, p_delimiter, i);
IF j = 0
THEN
j := len;
str := SUBSTR (p_str, i);
split_array.EXTEND;
split_array (split_array.COUNT) := str;
IF i = len
THEN
EXIT;
END IF;
ELSE
str := SUBSTR (p_str, i, j - i);
i := j + len1;
split_array.EXTEND;
split_array (split_array.COUNT) := str;
END IF;
END LOOP;
RETURN split_array;
END str_split;
/
INSTR(C1,C2,I,J) 在一个字符串中搜索指定的字符,返回发现指定的字符的位置; C1 被搜索的字符串 C2 希望搜索的字符串 I 搜索的开始位置,默认为1 J 出现的位置,默认为1
这个意思??
--截取至 第三个 分号位置,然后抽取第三个分号前面所有数据
SELECT substr('aaa;bbb;ccc;ddd;eee;fff;ggg;',1,INSTR('aaa;bbb;ccc;ddd;eee;fff;ggg;',';',1,3))
FROM dual;
--结果:
aaa;bbb;ccc;
SELECT decode( nvl(LENGTH(REGEXP_REPLACE(REPLACE(department, ';', '@'), '[^@]+', '')),0) ,
0,department
1,substr(department, 1, instr(department, ';', 1) -1)
2,substr(department,instr(department, ';', 1,1)+1,instr(department, ';', 1,2) - instr(department, ';', 1,1)-1),
3,substr(department,instr(department, ';', 1,1)+1,instr(department, ';', 1,2) - instr(department, ';', 1,1)-1)
4,substr(department,instr(department, ';', 1,1)+1,instr(department, ';', 1,2) - instr(department, ';', 1,1)-1)
) from dual
定义字段类型为varchar2, 直接插入就可以了。
create table stringtest(
teststring varchar2(1000)
)
insert into stringtest values('var v=123; var b=123; if(v==b){ return false}');