select t.*,'C'||lpad(row_number() over(order by to_number(substr(t.aaa,length(t.aaa)-4))),'5','0') cn from t_aa t ; 参考这个,自己改改吧。
update t_aa t set t.a_path = (select cn from (select 'C' || lpad(row_number() over(order by to_number(substr(a.aaa, length(a.aaa) - 4))), '5', '0') as cn, a.id from t_aa a) tmp where t.id = tmp.id); 我建的测试表,这个语句就行了 改下对应的字段名和表名。
需要根据id 更新还是 把生成的newcode 直接按从大到小的顺序写进去就可以了?
第一个 SELECT MAX(TO_NUMBER(SUBSTR(customercode,-5))) as maxnum from t
from t_aa t ;
参考这个,自己改改吧。
set t.a_path =
(select cn
from (select 'C' ||
lpad(row_number()
over(order by
to_number(substr(a.aaa, length(a.aaa) - 4))),
'5',
'0') as cn,
a.id
from t_aa a) tmp
where t.id = tmp.id);
我建的测试表,这个语句就行了
改下对应的字段名和表名。
把第一问新生成的编码,插入到NewCode这个列中,编码方式要求采用C00001的形式,
其中C是固定的,后面五位按照CustomerCode列后五位的升序,从1开始,按照升序排序
把第一问新生成的编码,插入到NewCode这个列中,编码方式要求采用C00001的形式,
其中C是固定的,后面五位按照CustomerCode列后五位的升序,从1开始,按照升序排序
我的意思是 例如id等于 2 的那个newcode应该是C10003, 假如id=100的是 C00002,你要的后面结果是 id=2是 C10003还是排序后的第二个值C00002
把第一问新生成的编码,插入到NewCode这个列中,编码方式要求采用C00001的形式,
其中C是固定的,后面五位按照CustomerCode列后五位的升序,从1开始,按照升序排序
我给的sql不就可以满足你的要求么,你执行看下就知道了啊