2013-02-04 9 views
18

io davvero non so esattamente cosa fare, io sono un po 'nuova a SQL ... devo usare sottostringa o sostituire nel mio casoCome sostituire il valore del campo di sql

ho nel mio DB archiviato chiamato e-mail, ora volevo modificare tutte le e-mail che terminavano con email.com su email.org. Cosa dovrei fare?

risposta

30

Dipende da cosa devi fare. È possibile utilizzare replace dal momento che si desidera sostituire il valore:

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

Poi al UPDATE la vostra tavola con il nuovo finale, allora si può usare:

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

è anche possibile espandere su questo controllando il ultimi 4 caratteri del valore e-mail:

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

Tuttavia, il problema con replace() è che può essere .com sarà in altre loca nella mail non solo l'ultima. Così si potrebbe desiderare di utilizzare substring() seguente modo:

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

Vedi SQL Fiddle with Demo

Utilizzando substring() restituirà l'inizio del valore di posta elettronica, senza il finale .com e poi si concatenare il .org fino alla fine. Ciò impedisce la sostituzione di .com altrove nella stringa.

In alternativa è possibile utilizzare stuff(), che ti permette di fare sia la cancellazione e l'inserimento al tempo stesso:

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

Questo eliminerà 4 caratteri nella posizione del terzo carattere prima l'ultimo (che è la posizione iniziale dell'ultimo .com) e inserire invece .org.

Vedere SQL Fiddle with Demo anche per questo metodo.

+0

ringrazio molto, ha funzionato bene. Apprezzato – user2039512

+1

@ user2039512 Sei il benvenuto, sono felice di aiutarti. Se una delle risposte alle tue domande è utile, assicurati di accettarla tramite il segno di spunta a sinistra. Aiuterà i futuri visitatori del sito e riceverete un rappresentante del sito per l'accettazione. :) – Taryn

3

Si potrebbe utilizzare REPLACE:

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

Ma tener conto di un indirizzo di posta elettronica come ad esempio [email protected] verrà aggiornato a [email protected].

Se si desidera essere più sicuri, è necessario verificare gli ultimi 4 caratteri utilizzando RIGHT e aggiungere .org allo SUBSTRING manualmente. Si noti l'utilizzo di UPPER per rendere la ricerca del .com senza maiuscole/minuscole.

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

Vedere che funziona in questo SQLFiddle.

-2

Prova questa query che cambierà i record con.com

UPDATE tablename SET email = replace(email, '.com', '.org') WHERE email LIKE '%.com'; 
+2

-1: verrà sostituito ovunque nell'indirizzo email. Effettuerebbe un doppio errore con 'john.comrad @ some.company.com' –

0

Per evitare nomi di aggiornamento che contengono .com come [email protected]-[email protected], si può fare questo:

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