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()函数必须加上限制条件,否则默认执⾏的是全表更新!
批量更新sql语句--错误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;
更新后,再次执⾏上⾯的查询语句
原因:根据第⼀个查询执⾏的结果,可以得出正确的结果应该使⽤是和否这
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论