我是新人,现有一坨数据,日期都是‘20110118’,为了测试 我想把这坨数据平均分成3个部分,分别对应日期‘20110116’,‘20110117’和‘20110118’。于是我这样做:update ods_hx_bill_pact_rel
set data_date = '20110116'
where rownum between 0 and (select count(*) from ods_hx_bill_pact_rel)/3;
update ods_hx_bill_pact_rel
set data_date = '20110117'
where rownum between (select count(*) from ods_hx_bill_pact_rel)/3 and (select count(*) from ods_hx_bill_pact_rel)*2/3;
但是每次执行之后,也提交了,之后查询发现只有前三分之一的数据被改成了‘20110116’,最后的三分之一的‘20110118’不变,中间的三分之一还是‘20110118’,没有变成‘20110117’,为什么呀?
set data_date = '20110116'
where rownum between 0 and (select count(*) from ods_hx_bill_pact_rel)/3;
update ods_hx_bill_pact_rel
set data_date = '20110117'
where rownum between (select count(*) from ods_hx_bill_pact_rel)/3 and (select count(*) from ods_hx_bill_pact_rel)*2/3;
但是每次执行之后,也提交了,之后查询发现只有前三分之一的数据被改成了‘20110116’,最后的三分之一的‘20110118’不变,中间的三分之一还是‘20110118’,没有变成‘20110117’,为什么呀?
解决方案 »
- 关于sqlplus developer使用或者oracle下创建角色或者用户的问题
- oracle10g 查看表内记录总数问题
- oracle 求解多元线性回归方程
- 大家好,问大家一时间段查询的问题,谢谢大家了
- 求助,什么叫迫切左外连接,迫切内连接。另,oracle中sql语句默认的连接方式。
- 求一sql写法!怎么查询结果集的第几条到第几条数据啊
- 请问下在oracle中超过2000万行记录的表如何处理才能提高存取性能?
- 关于数据库恢复的事,求助。
- 我想实现oracle数据库中某表每各几秒从一个文本文件中取数的功能,请问如何实现?
- 请教一个select的问题
- 交换where的XXX和YYY两个条件会改变查询速度吗?
- [推荐]oracle常用命令大汇总
是指查询出来之后再分配行号,所以不适于between,如果用between查出来可能不是你想要的结果这样
update ods_hx_bill_pact_rel
set data_date = '20110116'+ mod(rownum,3);
-----------------------------------谢谢你的解释,我可以解决当前问题了,但是刚才又发现一个这样的问题:
这坨数据有8000多行 我这样用:
select data_date from ods_hx_bill_pact_rel where rownum between 2000 and 4000结果也是一条记录也没有,这是怎么呢,
select data_date from ods_hx_bill_pact_rel where rownum between 0 and 4000这样却可以,为什么呀?
update ods_hx_bill_pact_rel set data_date = '20110116' and rownum<(select count(*) from ods_hx_bill_pact_rel)/3+1;
update ods_hx_bill_pact_rel set data_date = '20110117' and rownum<(select count(*) from ods_hx_bill_pact_rel)/3+1;
update ods_hx_bill_pact_rel set data_date = '20110118' and rownum<(select count(*) from ods_hx_bill_pact_rel)/3+1;
他只能从1开始往后生成
没有1 就查不到2000 所以是空的
rownum不是静态的 而是每查一条数据动态生成一个 所以 必须从1开始 不能搞空中楼阁
select data_date from (select rownum rn, data_date from ods_hx_bill_pact_rel)
where rn between 2000 and 4000;
另一种方式是做子查询,把rownum作为一个字段记录下来再使用
记住必须先取<=等的区间,然后再在此区间去取。
应该是:
select data_date from ods_hx_bill_pact_rel where rownum <= 4000
minus
select data_date from ods_hx_bill_pact_rel where rownum <=2000;