본문 바로가기
MySql

MySQL mysql- "address@domain.com"에서 "domain.com"을 업데이트하는 방법

by 베이스 공부 2020. 11. 22.
반응형

내 데이터베이스에는 전자 메일 주소를 잘못 입력 한 사용자가 많이 있습니다. 이로 인해 뉴스 레터를 보낼 때 내 postfix가 많은 메일을 반송하게됩니다.
Forms include (but are not limited to) "yaho.com", "yahho .com" etc.
매우 짜증나!

그래서 저는 그 기록을 올바른 값으로 업데이트하려고 노력하고 있습니다.
'% @ yaho %'와 같은 이메일과 '% yahoo %'와 같은 이메일이 아닌 사용자의 이메일 선택 을 실행하고 목록을 얻은 후 업데이트 방법 만 모르기 때문에 멈췄습니다. yaho 부분. 사용자 이름을 그대로 유지해야합니다.

그래서 데이터베이스를 덤프하고 vim을 사용하여 교체 할 것이라고 생각했지만 @ 기호를 이스케이프 할 수 없습니다 ..

BTW, CAPS로 작성된 모든 이메일 주소를 어떻게 선택합니까? select upper (email) from users; 는 모든 것을 CAPS로 변환하는 반면, 이미 작성된 캡스 메일을 찾아야했습니다.

 

해결 방법

 

다음과 같은 것을 시도해 볼 수 있습니다.

UPDATE   users
SET      email = CONCAT(LEFT(email, INSTR(email, '@')), 'yahoo.com')
WHERE    email LIKE '%@yaho.com%';

테스트 케이스 :

CREATE TABLE users (email varchar(50));

INSERT INTO users VALUES ('test1@yahoo.com');
INSERT INTO users VALUES ('test2@yaho.com');
INSERT INTO users VALUES ('test3@yahoo.com');


UPDATE   users
SET      email = CONCAT(LEFT(email, INSTR(email, '@')), 'yahoo.com')
WHERE    email LIKE '%@yaho.com%';

Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0


SELECT * FROM users;
+-----------------+
| email           |
+-----------------+
| test1@yahoo.com |
| test2@yahoo.com |
| test3@yahoo.com |
+-----------------+
3 rows in set (0.00 sec)


SELECT * FROM users WHERE email COLLATE latin1_general_cs = UPPER(email);

테스트 케이스 :

INSERT INTO users VALUES ('TEST4@YAHOO.COM');


SELECT * FROM users;   
+-----------------+
| email           |
+-----------------+
| test1@yahoo.com |
| test2@yahoo.com |
| test3@yahoo.com |
| TEST4@YAHOO.COM |
+-----------------+
4 rows in set (0.00 sec)


SELECT * FROM users WHERE email COLLATE latin1_general_cs = UPPER(email);
+-----------------+
| email           |
+-----------------+
| TEST4@YAHOO.COM |
+-----------------+
1 row in set (0.00 sec)

 

참조 페이지 https://stackoverflow.com/questions/2913861

 

 

반응형

댓글