web-dev-qa-db-fra.com

Comment remplacer la valeur du champ SQL

Je ne sais vraiment pas exactement quoi faire, je suis un peu nouveau en SQL ... devrais-je utiliser une chaîne ou la remplacer dans mon cas?

J'ai dans mon courrier électronique DB appelé appelé, maintenant je voulais éditer tous les emails se terminant par email.com à email.org. Que dois-je faire?

19
user2039512

Cela dépend de ce que vous devez faire. Vous pouvez utiliser replace puisque vous souhaitez remplacer la valeur:

select replace(email, '.com', '.org')
from yourtable

Ensuite, pour UPDATE votre table avec la nouvelle fin, vous utiliseriez alors:

update yourtable
set email = replace(email, '.com', '.org')

Vous pouvez également développer ceci en vérifiant les 4 derniers caractères de la valeur email:

update yourtable
set email = replace(email, '.com', '.org')
where right(email, 4) = '.com'

Cependant, le problème avec replace() est que .com peut être dans d’autres emplacements du courrier électronique, pas seulement le dernier. Donc, vous voudrez peut-être utiliser substring() de la manière suivante:

update yourtable
set email = substring(email, 1, len(email) -4)+'.org'
where right(email, 4) = '.com';

Voir SQL Fiddle avec Demo

Utiliser substring() renverra le début de la valeur de l'e-mail, sans le .com final, puis vous concaténerez le .org à la fin. Cela empêche le remplacement de .com ailleurs dans la chaîne. 

Vous pouvez également utiliser stuff() , qui vous permet de supprimer et d’insérer simultanément:

update yourtable
set email = stuff(email, len(email) - 3, 4, '.org')
where right(email, 4) = '.com';

Ceci supprimera 4 caractères à la position du troisième caractère avant le dernier (qui est la position de départ du .com final) et insérera plutôt .org.

Voir SQL Fiddle avec Demo pour cette méthode également.

32
Taryn

Vous pouvez simplement utiliser REPLACE

UPDATE myTable SET emailCol = REPLACE(emailCol, '.com', '.org')`.

Mais prenez en compte qu'une adresse email telle que [email protected] sera mise à jour pour [email protected]

Si vous voulez être plus sûr, vous devriez vérifier les 4 derniers caractères en utilisant RIGHT , et ajouter .org au SUBSTRING manuellement. Notez l'utilisation de UPPER pour rendre la recherche de .com insensible à la casse.

UPDATE myTable 
SET emailCol = SUBSTRING(emailCol, 1, LEN(emailCol)-4) + '.org'
WHERE UPPER(RIGHT(emailCol,4)) = '.COM';

Voyez le travail dans ceci SQLFiddle .

4
Xavi López

Pour éviter les noms de mise à jour contenant .com comme [email protected] à [email protected], procédez comme suit:

UPDATE Yourtable
SET Email = LEFT(@Email, LEN(@Email) - 4) + REPLACE(RIGHT(@Email, 4), '.com', '.org')
0
veljasije