MySQL의 모든 전자 메일 주소를 regexp로 업데이트하는 방법이 있습니까? 내가 원하는 것은 [email protected] 주소를 [email protected]로 변경하는 것입니다. SQL로 할 수 있습니까? 예를 들어 PHP로해야합니까?MySQL에서 전자 메일 주소 업데이트 (정규식?)
감사합니다.
MySQL의 모든 전자 메일 주소를 regexp로 업데이트하는 방법이 있습니까? 내가 원하는 것은 [email protected] 주소를 [email protected]로 변경하는 것입니다. SQL로 할 수 있습니까? 예를 들어 PHP로해야합니까?MySQL에서 전자 메일 주소 업데이트 (정규식?)
감사합니다.
을 MySQL
으로 검색 할 수 있지만, 불행히도 일치하는 부분을 반환 할 수 없습니다. 다음과 같이
이 SQL
와 함께 할 수있다 :
UPDATE mytable
SET email = REPLACE(email, '@domain.xx', '@domain.yy')
WHERE email REGEXP '@domain.xx$'
당신은 WHERE
절을 생략 할 수 있지만 예상치 못한 결과가 발생할 수 있습니다 (같은 @example.xxx.com
@example.yyx.com
로 대체됩니다)가 떠나 더 나은 그래서, 그것.
는 MySQL의 설치되어 있지 않기 때문에, 그것을 확인하지만, 그것은 당신에게
update table_name
set table_name.email = substr(table_name.email, 0, position("@" in table_name.email) + 1)
+ "new_domain";
PS 도움이 될 것 같습니다하지 않았다. 문자열이 패턴과 일치 할 때마다 문자열에서 문자열의 특정 입구를 찾는 데 도움이되기 때문에 Regexp는 업데이트에 도움이되지 않습니다. Here 관련 기능에 대한 참조를 찾을 수 있습니다.
가능한 경우 PHP로 처리하는 것이 좋습니다. MySQL은 유감스럽게도 정규 표현식에서 일치하는 부분을 캡처하는 것을 허용하지 않습니다. 또는 더 나은 : 당신은 예를 들어, 다음과 같은 두 가지를 결합 할 수 있습니다 : 당신이 당신의 데이터베이스에 여러 항목이있는 경우 실행 제한이 솔루션은 꽤 시간이 좀 걸릴 것입니다 그리고 당신은 메모리가 부족하거나 공격
$emails = fetchAllDistinctEmailsIntoAnArray();
# Make the array int-indexed:
$emails = array_values($emails);
# convert the mails
$replacedEmails = preg_replace('/xx$/', 'yy', $emails);
# create a new query
$cases = array();
foreach ($emails as $key => $email) {
# Don't forget to use mysql_escape_string or similar!
$cases[] = "WHEN '" . escapeValue($email) .
"' THEN '" . escappeValue(replacedEmails[$key]) . "'";
}
issueQuery(
"UPDATE `YourTable`
SET `emailColumn` =
CASE `emailColumn`" .
implode(',', $cases) .
" END CASE");
하는 것으로 . 이 스크립트의 메모리 제한을 변경하는 방법은 ignore_user_abort()
과 ini_set()
입니다.
면책 조항 : 스크립트 테스트를 거치지 않았습니다! 코드를 이해/테스트하지 않고 사용하지 마십시오 (db가 엉망이 될 수 있음).
UPDATE tableName
SET email = CONCAT(SUBSTRING(email, 1, locate('@',email)), 'domain.yy')
WHERE email REGEXP '@domain.xx$';