我的电子邮件列中包含无效地址,例如“XXX @ hotmail.co.uk,XXX @ hotmail.co.uk”。 (它包括引号)
我的select语句清除了这些:
SELECT SUBSTRING([Email], 2, PATINDEX(‘%,%’, [Email] – 2))
FROM table
WHERE [Email] LIKE ‘”%”’
这可以工作并显示:xxx@hotmail.co.uk
我遇到的问题是,我有大量错误格式的记录,我需要使用上面的SELECT查询结果更新它们。有什么想法吗?
答案 0 :(得分:2)
UPDATE table SET
[Email] = SUBSTRING([Email], 2, PATINDEX(‘%,%’, [Email] – 2))
WHERE
[Email] LIKE ‘”%”’
答案 1 :(得分:2)
确保您不会丢失任何有效的电子邮件,只需保存更改后的电子邮件:
CREATE TABLE ChangedEmails
(
PK ...
Email ...
)
然后修复电子邮件并保存更改的电子邮件(在一个声明中)
UPDATE YourTable
SET Email=SUBSTRING([Email], 2, PATINDEX(‘%,%’, [Email] – 2))
OUTPUT INSERTED.PK,DELETED.Email
INTO ChangedEmails
WHERE
Email LIKE ‘”%”’
现在如果有任何疑问,您可以在更改之前看到之前的电子邮件。
另外,根据OP的评论:
这是我提出的,但我得到了 一个PK违规密钥,所以我想我需要 找到导致这种情况的行。 谢谢!
不要让PK成为电子邮件地址!! 使用身份作为PK并使电子邮件成为数据列。用它来“修复”你的桌子:
ALTER TABLE YourTable ADD YourPKID int NOT NULL IDENTITY (1, 1)
GO
ALTER TABLE YourTable DROP CONSTRAINT PK_YourTable
GO
ALTER TABLE dbo.JobApps ADD CONSTRAINT
PK_YourTable PRIMARY KEY CLUSTERED
(
YourPKID
) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
答案 2 :(得分:1)
UPDATE table
SET Email = SUBSTRING([Email], 2, PATINDEX(‘%,%’, [Email] – 2))
WHERE [Email] LIKE ‘”%”’
应该做的伎俩。当然,首先在测试数据上进行测试:)
答案 3 :(得分:1)
您可以使用UPDATE
语句,如下所示:
update table
set Email = SUBSTRING(Email, 2, PATINDEX('%,%', Email – 2))
WHERE Email LIKE '"%"'
答案 4 :(得分:1)
UPDATE table
SET [Email] = SUBSTRING([Email], 2, PATINDEX(‘%,%’, [Email] – 2))
WHERE [Email] LIKE ‘”%”’
请事先确定这个表达式仅匹配这些有问题的电子邮件地址,并且您不会选择其他具有不同值的行。