2010-04-15 3 views
1

J'ai une colonne E-mail avec des adresses invalides dans celles-ci. "Xxx @ hotmail.co.uk, xxx @ hotmail.co.uk". (Il comprend les guillemets)Mettre à jour la requête? Ou autre solution?

Mon instruction select nettoie ces up:

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

Cela fonctionne et affiche: [email protected]

Problème Je suis est, j'ai une multitude de enregistrements avec le format incorrect et j'ai besoin de les mettre à jour avec le résultat de la requête SELECT ci-dessus. Des idées?

Répondre

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

Assurez-vous d'avance que cette expression comme est seulement correspondant à ces problématiques adresses e-mail, et vous ne prenez pas d'autres lignes avec des valeurs différentes.

+0

Voici ce que j'ai trouvé, mais je reçois une clé de violation PK, donc je suppose que j'ai besoin de trouver les lignes qui causent cela. Merci! –

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 ‘”%”’ 

devrait faire l'affaire. Bien sûr, le tester sur des données de premier test :)

1

Vous pouvez utiliser une instruction UPDATE comme ceci:

update table 
set Email = SUBSTRING(Email, 2, PATINDEX('%,%', Email – 2)) 
WHERE Email LIKE '"%"' 
2

être sûr que vous ne perdez pas d'e-mails valides, il suffit de sauvegarder les changé:

CREATE TABLE ChangedEmails 
(
PK ... 
Email ... 
) 

puis fixer les e-mails et sauver ceux modifiés (dans une instruction)

Maintenant, en cas de doute, vous pouvez voir ce que l'e-mail précédent était avant de les modifier.

AUSSI, sur la base des OPs Commentaire:

C'est ce que je suis venu avec mais je reçois une clé de violation PK, donc je suppose que je dois trouver quelles lignes sont à l'origine de cette. Merci!

NE FAITES PAS de PK une adresse e-mail !! utiliser une identité comme PK et faire de l'e-mail juste une colonne de données. Utilisez ceci pour "réparer" votre table:

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. Beau. Implémenté ceci afin de trouver ceux qui ont causé les validations PK :) –

Questions connexes