如何在IBM DB2中用SQL部分替换Accountno列(不新增列)
IBM DB2 SQL 修改Accountno列实现部分内容替换
针对需求中9位账号的部分替换(保留首尾各两位,中间替换为*****),可以使用DB2的字符串截取与拼接函数实现直接更新:
基础SQL语句(假设Accountno为字符串类型,如VARCHAR)
UPDATE 你的表名 SET Accountno = CONCAT(CONCAT(SUBSTR(Accountno, 1, 2), '*****'), SUBSTR(Accountno, 8, 2)) WHERE LENGTH(Accountno) = 9;
说明:
SUBSTR(Accountno, 1, 2):提取账号的前两位字符SUBSTR(Accountno, 8, 2):提取账号的最后两位(9位账号的第8、9位)CONCAT:依次拼接前两位、*****、后两位,得到目标格式- WHERE子句用于过滤仅9位长度的账号,避免误修改其他长度的记录
如果Accountno是数字类型(如DECIMAL/INTEGER)
需要先将数字转为字符串处理,完成后再转回原数据类型:
UPDATE 你的表名 SET Accountno = CAST( CONCAT(CONCAT(SUBSTR(CHAR(Accountno), 1, 2), '*****'), SUBSTR(CHAR(Accountno), LENGTH(CHAR(Accountno))-1, 2)) AS VARCHAR(9) -- 替换为你的Accountno原数据类型,比如DECIMAL(9,0) ) WHERE LENGTH(CHAR(Accountno)) = 9;
内容的提问来源于stack exchange,提问作者Maheshwar Reddy
相关产品推荐
相关产品推荐

