当前位置: 代码迷 >> Oracle认证考试 >> 求教高手帮小弟我完成这个UPDATE语句,非常感谢
  详细解决方案

求教高手帮小弟我完成这个UPDATE语句,非常感谢

热度:4141   发布时间:2013-02-26 00:00:00.0
求教高手帮我完成这个UPDATE语句,非常感谢!
一个用户下的2张表
hsp_entity(entity_id)
hsp_object(object_id,object_name)
找出entity_id与object_id相匹配的记录,然后UPDATE这些记录的object_name

原来的object_name如下,我想把所有的“.”替换成“-”,请注意第一条记录后面没有“.”
C014304
C014304.C014300
C014300.I014300
C014300.I010812
C014300.I000105
C014304.I011300
C014304.C014305
C014305.I007800
C014305.I007900

我使用了这样的语句
UPDATE HSP_OBJECT
SET OBJECT_NAME=CONCAT(CONCAT(SUBSTR(OBJECT_NAME,1,7),'-'),SUBSTR(OBJECT_NAME,9,30))
WHERE HSP_OBJECT.OBJECT_ID IN
(
SELECT OBJECT_ID
  FROM hsp_object,hsp_entity
WHERE entity_id=object_id
);

但是得到了这样的结果,其他记录都对,第一条记录多了个“-”的尾巴,请问如何解决,或者有没有别的写法
C014304-
C014304-C014300
C014300-I014300
C014300-I010812
C014300-I000105
C014304-I011300
C014304-C014305
C014305-I007800
C014305-I007900
------解决方案--------------------------------------------------------
建议你使用存储过程,在update之前,先判断一下,就行了
------解决方案--------------------------------------------------------
UPDATE HSP_OBJECT set OBJECT_NAME=trim ('-' from OBJECT_NAME) where OBJECT_NAME like '%-'
------解决方案--------------------------------------------------------
--增加判定
UPDATE HSP_OBJECT 
SET OBJECT_NAME= 
   case when instr(object_name,'.')=8 then CONCAT(CONCAT(SUBSTR(OBJECT_NAME,1,7),'-'),SUBSTR(OBJECT_NAME,9,30)) 
   else object_name end
      
WHERE HSP_OBJECT.OBJECT_ID IN 

SELECT OBJECT_ID 
FROM hsp_object,hsp_entity 
WHERE entity_id=object_id 
); 
--或者更简单,用replace();
UPDATE HSP_OBJECT 
SET OBJECT_NAME=replace(object_name,'.','-')
      
WHERE HSP_OBJECT.OBJECT_ID IN 

SELECT OBJECT_ID 
FROM hsp_object,hsp_entity 
WHERE entity_id=object_id 
); 

OBJECT_ID OBJECT_NAME
1 C014304
2 C014304-C014300
3 C014300-I014300
4 C014300-I010812
5 C014300-I000105
6 C014304-I011300
7 C014304-C014305
8 C014305-I007900

------解决方案--------------------------------------------------------
突然发现直接replace就可以了
  相关解决方案