我有一个 USER 表,其中一列包含 SSN,另一列包含 SSN +5 位数字(我们可以称之为 SSNPLUS)。某些行的 SSN 源已损坏,因此我想仅针对那些受影响的行从另一列的一部分更新 SSN。
示例问题
SSN SSNPLUS
012345678 01234567899221 <--this is valid
888888888 88888888854221 <--this is valid
56ABCJ 07512333800998 <--SSN col is invalid because of alpha chars
992345678 99234567877112 <--this is valid
81AJUNK 01526690966772 <--SSN col is invalid because of alpha chars
098765432 09876543288992 <--this is valid
Desired Result
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]
你可以看到我不是一个 SQL 人员,我想在其中添加一个正则表达式,但我猜这在这个应用程序中不起作用;非常感谢任何帮助,因为我们的数据库人员尚未被替换!呃!
以下 SQL 应该适用于大多数 RDBMS:
UPDATE USER
SET ssn = LEFT(ssnplus, 9)
WHERE ssn <> LEFT(ssnplus, 9)
;