You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从SSNPLUS前9位更新USER表中无效SSN字段

修复USER表中损坏的SSN字段

需求说明

USER表包含SSN和SSNPLUS字段(SSNPLUS为SSN后追加5位数字)。部分行的SSN字段因包含字母损坏,需仅针对这些行,用SSNPLUS字段的前9位更新SSN字段。

示例数据

原始数据

SSN       SSNPLUS
012345678 01234567899221   <-- 有效数据
888888888 88888888854221   <-- 有效数据
56ABCJ    07512333800998   <-- SSN含字母,无效
992345678 99234567877112   <-- 有效数据
81AJUNK   01526690966772   <-- SSN含字母,无效
098765432 09876543288992   <-- 有效数据

期望结果

SSN       SSNPLUS
012345678 01234567899221   
888888888 88888888854221   
075123338 07512333800998   
992345678 99234567877112   
015266909 01526690966772    
098765432 09876543288992   

你的思路伪代码

update USER set USER.ssn select left(ssnplus, 9) from USER.ssnplus where ssn contains [A-Z]

解决方案

不同数据库的正则匹配语法存在差异,以下是主流数据库的实现方案:

MySQL/MariaDB

使用REGEXP匹配包含字母的SSN,通过LEFT()截取SSNPLUS前9位:

UPDATE USER
SET SSN = LEFT(SSNPLUS, 9)
WHERE SSN REGEXP '[A-Za-z]';

SQL Server

使用PATINDEX定位包含字母的行:

UPDATE USER
SET SSN = LEFT(SSNPLUS, 9)
WHERE PATINDEX('%[A-Za-z]%', SSN) > 0;

Oracle

使用REGEXP_LIKE进行正则匹配,SUBSTR()截取指定长度内容:

UPDATE USER
SET SSN = SUBSTR(SSNPLUS, 1, 9)
WHERE REGEXP_LIKE(SSN, '[A-Za-z]');

重要提示

  • 执行更新前,建议先运行查询语句验证目标行及更新后的值是否正确:
    以MySQL为例:
    SELECT SSN, SSNPLUS, LEFT(SSNPLUS, 9) AS NEW_SSN
    FROM USER
    WHERE SSN REGEXP '[A-Za-z]';
    
  • 若数据库支持事务,建议开启事务后执行更新,确认结果无误再提交,避免误操作导致数据异常。

内容的提问来源于stack exchange,提问作者Twelve-0-Seven

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 20:43:10