我正在尝试从一列MyTable.SSN
中获取数据,并将其复制到同一个表MyTable.SSNWithDashes
中的另一个列,只是格式不同。如果MyTable.SSN
没有正好9个数字,我根本不在乎处理它。
我试过这个:
IF( SELECT LEN( [SSN] ) FROM [MyTable] ) = 9
UPDATE [MyTable] SET [SSNWithDashes] = LEFT( [SSN], 3 ) + '-' + SUBSTRING( [SSN], 4, 2 ) + '-' + RIGHT( [SSN], 4 )
ELSE
UPDATE [MyTable] SET [SSNWithDashes] = NULL
虽然这样可行但却会引发错误:
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
虽然我明白警告的内容,但我不确定如何以不同的方式解决这个问题。
我怎样才能重构这个以消除警告(也许读一点清洁工)?
答案 0 :(得分:4)
UPDATE dbo.[MyTable]
SET [SSNWithDashes] = CASE
WHEN LEN(SSN) = 9 THEN
LEFT([SSN],3) + '-' + SUBSTRING([SSN],4,2) + '-' + RIGHT([SSN],4)
ELSE NULL
END;
答案 1 :(得分:1)
假设您的SSNWithDashes
已经NULL
,那么
UPDATE dbo.[MyTable]
SET [SSNWithDashes] = LEFT([SSN],3) + '-' + SUBSTRING([SSN],4,2) + '-' + RIGHT([SSN],4)
WHERE LEN(SSN) = 9
其他所有行都保持NULL