qlsql oracle 怎么把大于某字段小于某字段的数据排成一列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了qlsql oracle 怎么把大于某字段小于某字段的数据排成一列相关的知识,希望对你有一定的参考价值。

qlsql oracle 怎么把大于某字段小于某字段的数据排成一列
如有表MM,字段A、B,如下图所示,现在需要为大于等于A,小于等于B的所有数据排成一列,形成表NN。
要怎样写语句才能建成表NN呢??
表MM 表NN
列 A B 列 C
1 3 1
7 9 2
3
7
8
9

create table mm (a number(10),b number(10));
create table nn (c number(10));
insert into mm values (1,3);
insert into mm values (7,9);
commit;

declare
begin
for r in (select a,b from mm) loop
insert into nn select * from (select row_number() over(order by a.object_id) rn from dba_objects a) t where t.rn between r.a and r.b;
end loop;
commit;
end;
参考技术A 用存储过程做吧..追问

这个过程应该怎么写呢??

参考技术B 写个过程吧。单纯的sql搞不出来。追问

这个过程应该怎么写呢??

追答

过程代码我不会提供,我认为需要你自己写。
过程的逻辑就在你的需求里面。
如有表MM,字段A、B,如下图所示,
现在需要为大于等于A,小于等于B的所有数据排成一列。
翻译成程序的逻辑,分析如下:
1、MM表行数据循环
2、获取每一行数据的大于等于A,小于等于B的内容。
3、对获取的内容进行重复、排序处理。
以下是我闲来无事写的代码:
declare
V_A number(12);
V_B number(12);
V_STR varchar2(4000);
cursor C_MM is
select A, B from MM order by A;
begin
open C_MM;
loop
fetch C_MM
into V_A, V_B;
exit when C_MM%notfound;
if V_B > V_A then
for R_AB in V_A .. V_B loop
if LENGTH(V_STR) > 0 then
if INSTR(V_STR, R_AB, 1) = 0 then
V_STR := V_STR || R_AB || ',';
INSERT INTO nn VALUES (R_AB);
end if;
else
V_STR := V_STR || R_AB || ',';
INSERT INTO nn VALUES (R_AB);
end if;
end loop;
end if;
end loop;
DBMS_OUTPUT.PUT_LINE(V_STR);
COMMIT WORK;
end;

批量修改oracle数据库中的某一个字段?

我的表中有一类字段,由于内容太长了,我想做一些批处理,把记录中包含括号的内容给去掉,如何用sql实现

可以通过update方法进行批量修改。
sql:update table_name SET age=25;
备注:也可以添加必要的条件,针对固定条件的数据进行批量修改。
sql:update table_name SET age=age+1 where name ='zhangsan ';
参考技术A 写个过程处理。或者写个小程序来处理吧。如果存储过程熟练就用存储过程,如果程序熟练就程序吧

先要分析数据。看是否有规律。如果有规律用字符串截取然后再拼在一起。就解决了。如果是没有规律的那就麻烦点。楼上的回答只适合于有规律的数据
参考技术B --以下是我根据你的描述,做的测试,希望对你有帮助:

-- 新建一张表kongxianji:
CREATE TABLE kongxianji(a VARCHAR2(200));

-- 插入数据,然后提交:
INSERT INTO kongxianji (a) VALUES ('12345(6)789');
INSERT INTO kongxianji (a) VALUES ('12345(67)89');
INSERT INTO kongxianji (a) VALUES ('12345(678)9');
COMMIT;
SELECT * FROM kongxianji;

-- 把a中的括号去掉,然后提交,到这一步可以查看表中数据的变化情况:
UPDATE kongxianji SET a = replace(a,substr(a,instr(a,'('),(instr(a,')')-instr(a,'(')+1)),'');
COMMIT;

SELECT * FROM kongxianji;本回答被提问者和网友采纳
参考技术C oralce 9i 10g测试通过
SQL> select * from test2;

STR1
--------------------------------------------------------------------------------
abc(asdlfjl;;asx)qpweruas;dfs
xxxx(jl;;asx)qxxppruas;dfs

update test2 t1 set t1.str1=(select substr(str1,1,instr(str1,'(' )-1)||substr(str1,instr(str1,')')+1) str2 from test2 t2 where t1.rowid=t2.rowid)
/

SQL> select * from test2;

STR1
--------------------------------------------------------------------------------
abcqpweruas;dfs
xxxxqxxppruas;dfs

以上是关于qlsql oracle 怎么把大于某字段小于某字段的数据排成一列的主要内容,如果未能解决你的问题,请参考以下文章

sql表中如何表示大于0小于100?

oracle数据库中,我想把字段A中,字段长度大于22的数据提取出来,在develop中请问语句该怎么写啊?

sql查询大于字段的所有数据,或小于字段的所有数据

oracle 查找某字段中含有回车换行的记录,请问怎么写SQL?

oracle 把某字段里面的特定字符,转换为回车换行符,请问怎么弄?

关于Oracle的decode函数