2010-04-15 44 views
1

我有一個電子郵件列中包含無效的地址,例如「XXX @ hotmail.co.uk,XXX @ hotmail.co.uk」。 (它包括引號)更新查詢?還是其他解決方案

我的select語句清理這些了:

SELECT SUBSTRING([Email], 2, PATINDEX(‘%,%’, [Email] – 2)) 
FROM table 
WHERE [Email] LIKE ‘」%」’ 

這工作,並顯示:[email protected]

問題我已經是,我有大量記錄不正確的格式,我需要使用上面的SELECT查詢的結果來更新它們。有任何想法嗎?

回答

1
UPDATE table 
SET [Email] = SUBSTRING([Email], 2, PATINDEX(‘%,%’, [Email] – 2)) 
WHERE [Email] LIKE ‘」%」’ 

只要確保提前,這就像表達只有匹配這些有問題電子郵件地址,並且您不會選取具有不同值的其他行。

+0

這是我想出了,但我得到一個PK違反關鍵,所以我想我需要找到哪些行導致此。謝謝! – 2010-04-15 13:36:21

2
UPDATE table SET 
    [Email] = SUBSTRING([Email], 2, PATINDEX(‘%,%’, [Email] – 2)) 
WHERE 
    [Email] LIKE ‘」%」’ 
1
UPDATE table 
SET Email = SUBSTRING([Email], 2, PATINDEX(‘%,%’, [Email] – 2)) 
WHERE [Email] LIKE ‘」%」’ 

應該做的伎倆。當然,對其進行測試,測試數據第一:)

1

您可以使用UPDATE聲明是這樣的:

update table 
set Email = SUBSTRING(Email, 2, PATINDEX('%,%', Email – 2)) 
WHERE Email LIKE '"%"' 
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 ‘」%」’ 

現在如果有任何疑問,您可以在更改之前查看以前的電子郵件。

此外,基於對老年退休金計劃發表評論:

這是我想出了,但我得到一個 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 
+0

+1。美麗。執行此操作以查找哪些導致了PK驗證:) – 2010-04-15 13:41:37