oracle 批量替换某字段中第一位的值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle 批量替换某字段中第一位的值相关的知识,希望对你有一定的参考价值。

比如说,某字段值000001 000002 000003 想要把第一位的0批量替换成2

参考技术A UPDATE TABLE_NAME SET COL1 = '2'||SUBSTR(COL1,2,LENGTH(COL1) - 1) 参考技术B 对于这个意思,不知道楼住是想哪一种?
1、不管第一位是什么,直接替换为2;
2、只有当第一位为0的时候,才替换为2;

对于第一种想法的话,可以通过截取字符串,可以用下面的更新语句:
UPDATE 表名 SET 字段名= '2' || substr(字段名,2) WHERE 字段名 IS NOT NULL;

(注意:oracle中的第一个字符的位置为1,第二个的位置为2,因此,上面使用substr(字段名,2),而不像java中,使用1)

对于第二种想法,可以使用正则表达来进行处理,或者是采用下面的方法:
UPDATE 表名 SET 字段名= '2' || substr(字段名,2) WHERE 字段名 IS NOT NULL AND substr(字段名,1,1) = '0';
(经过试验,其中第二种情况下,条件:字段名 IS NOT NULL 可以省略掉)本回答被提问者采纳

Oracle 批量更新表字段

(一) 将数字替换成汉字

  第一步,去重查询

  使用distinct关键字先对该字段值进行去重查询,看共有几种情况

--查询指定区间内表停诊字段的值
SELECT DISTINCT T.CLOSE_TZ
  FROM CONSULT_SCHEDULE T
 WHERE T.SCHEDULE_DATE BETWEEN TO_DATE(\'2018-01-01\', \'yyyy-MM-dd\') AND
       TO_DATE(\'2018-02-28\', \'yyyy-MM-dd\');

  查询结果:共有3种情况

  

  第二步,区分不同的数值并更新对应的汉字

  0改为是,1改为否

  使用decode函数实现

--正确sql
UPDATE CONSULT_SCHEDULE T
   SET T.REPLACE_TZ = DECODE(REPLACE_TZ, \'1\', \'\', \'0\', \'\')
 WHERE T.REPLACE_TZ IN (\'0\', \'1\')
   AND T.SCHEDULE_DATE BETWEEN TO_DATE(\'2018-01-01\', \'yyyy-MM-dd\') AND
       TO_DATE(\'2018-02-28\', \'yyyy-MM-dd\');

  易错点说明:

  错误一

--错误sql1:CLOSE_TZ字段是varchar2类型
UPDATE CONSULT_SCHEDULE T
   SET T.CLOSE_TZ = DECODE(CLOSE_TZ, 1, \'\', 0, \'\')
 WHERE T.SCHEDULE_DATE BETWEEN TO_DATE(\'2018-01-01\', \'yyyy-MM-dd\') AND
       SYSDATE;  

  

  解析:CLOSE_TZ字段是varchar2类型,1和0是number类型

  错误二:使用decode()函数必须加上限制条件,否则默认执行的是全表更新!

--错误sql2:使用decode()函数,不在指定的情况会被置空
UPDATE CONSULT_SCHEDULE T
   SET T.CLOSE_TZ = DECODE(CLOSE_TZ, \'1\', \'\', \'0\', \'\')
 WHERE T.SCHEDULE_DATE BETWEEN TO_DATE(\'2018-01-01\', \'yyyy-MM-dd\') AND
       SYSDATE;

  更新后,再次执行上面的查询语句

  

  原因:根据第一个查询执行的结果,可以得出正确的结果应该使用是和否这2种情况,但这却是3种情况

  解析:这是因为decode函数使用不当造成的,应该将不需要更改的列去除掉。 

  小技巧:在修改数据库数据时,执行update语句后,一定不要急着提交,执行一次查询看看是否是自己想要的结果,再提交。

(二)将一个字段的值给另一字段  

UPDATE  VIRTUAL_CARD T SET T.ID_CARD=T.CARDNUM WHERE T.ID_CARD IS NULL;

(三)批量修改表字段中指定字符 

    UpdateTime--2017年8月23日08:44:34

    1.1.22 替换字段中指定字符串 

--将PATIENT_AUTO_IMAGEINFO表中字段IMAGE_ADRESS中的#号转换成_
UPDATE PATIENT_AUTO_IMAGEINFO
   SET IMAGE_ADRESS = REPLACE(IMAGE_ADRESS, \'#\', \'_\')
 WHERE IMAGE_ADRESS LIKE \'%#%\'

(四)根据ID批量修改

UPDATE TSORGDIAITEM
    set FSTATUS = ?, FAUDITER = ?, FAUDDATE = SYSDATE
WHERE FID IN (15632875, 15612443)

 

以上是关于oracle 批量替换某字段中第一位的值的主要内容,如果未能解决你的问题,请参考以下文章

SQL语句替换某表某字段中第几字符

mySQL怎么批量替换查询结果中的字段值?

Oracle 批量更新表字段

sql批量替换及替换某字段的前N个字符

oracle数据库字段内容如何批量替换?

python列表,如何批量查找替换