在Mysql表中更新电子邮件

时间:2014-06-24 11:57:35

标签: mysql

我的表格中有很多条目 USERS 。它包含最多500封电子邮件。

示例:

rskidmore@soundviewprep.org
53e935da@mail.com
james.vh@naturescomfortllc.com
arlie@lottapop.com
gigabite10@att.net

我想用“1”后缀更新所有电子邮件。 输出应该是

rskidmore@soundviewprep1.org
53e935da@mail1.com
james.vh@naturescomfortllc1.com
arlie@lottapop1.com
gigabite10@att1.net

单个查询是否可以替换最后一次出现的“。” ???

4 个答案:

答案 0 :(得分:1)

你可以这样做:

UPDATE `USERS` SET `email` = CONCAT( SUBSTRING(`email`, 1, LENGTH(`email`) -1 -LENGTH(SUBSTRING_INDEX(`email`, '.', -1))), '1.', SUBSTRING_INDEX(`email`, '.', -1));

如果你必须考虑" co.uk"必须是一个牢不可破的单位,你可以使用它(如果你愿意,可以添加更多这样的子域星座):

UPDATE `USERS` SET `email` = IF(
SUBSTRING(`email`,-6)=".co.uk"
, CONCAT(SUBSTRING(`email`,1,LENGTH(`email`)-6), "1.co.uk")
, CONCAT(SUBSTRING(`email`,1,LENGTH(`email`)-1-LENGTH(SUBSTRING_INDEX(`email`, '.', -1))), '1.', SUBSTRING_INDEX(`email`, '.', -1))
);

答案 1 :(得分:0)

使用CONCAT()LENGTH()SUBSTRING_INDEX()非常简单。我在下面的查询中测试了

UPDATE 
  your_table 
SET
  email = CONCAT(
    SUBSTRING_INDEX(email, '.', 1),
    '1.',
    IF(
      (
        LENGTH(email) - LENGTH(REPLACE(email, '.', ''))
      ) = 2,
      SUBSTRING_INDEX(email, '.', - 2),
      SUBSTRING_INDEX(email, '.', - 1)
    )
  ) ;

您可以参考here,上面的mysql函数

此解决方案甚至适用于

test@test.com             test@test1.com
test@yahoo.in             test@yahoo1.in
test@happy.co.in          test@happy1.co.in

答案 2 :(得分:-1)

最好的方法是使用脚本语言,可以轻松地执行此操作,拆分字符串,添加' 1'然后加入他们。我不知道它是否只能用SQL。这是sql中的追加。 SQL query to prepend prefix to existing value in a field此外,您可以使用LIKE构造用于正则表达式来标识链接。 Update a column of a table with append some values to the same column value in MySQL也是{{3}}。我认为你必须使用这些来创建一个解决方法

答案 3 :(得分:-1)

是的,这可以作为

完成
select 
replace('james.vh@naturescomfortllc.com',
       substring_index(substring_index('james.vh@naturescomfortllc.com','@',-1),'.',1),
       concat(substring_index(substring_index('james.vh@naturescomfortllc.com','@',-1),'.',1),'1')
)

以下是一些测试

mysql> select 
    -> replace('james.vh@naturescomfortllc.com',
    ->        substring_index(substring_index('james.vh@naturescomfortllc.com','@',-1),'.',1),
    ->        concat(substring_index(substring_index('james.vh@naturescomfortllc.com','@',-1),'.',1),'1')
    -> ) as result ;
+---------------------------------+
| result                          |
+---------------------------------+
| james.vh@naturescomfortllc1.com |
+---------------------------------+
1 row in set (0.00 sec)


mysql> select 
    -> replace('rskidmore@soundviewprep.org',
    ->        substring_index(substring_index('rskidmore@soundviewprep.org','@',-1),'.',1),
    ->        concat(substring_index(substring_index('rskidmore@soundviewprep.org','@',-1),'.',1),'1')
    ->        
    -> ) as result ;
+------------------------------+
| result                       |
+------------------------------+
| rskidmore@soundviewprep1.org |
+------------------------------+


mysql> select 
    -> replace('rskid.mo.re@soundviewprep.co.uk',
    ->        substring_index(substring_index('rskid.mo.re@soundviewprep.co.uk','@',-1),'.',1),
    ->        concat(substring_index(substring_index('rskid.mo.re@soundviewprep.co.uk','@',-1),'.',1),'1')
    ->        
    -> ) as result ;
+----------------------------------+
| result                           |
+----------------------------------+
| rskid.mo.re@soundviewprep1.co.uk |
+----------------------------------+
1 row in set (0.00 sec)

所以这是更新命令

update your_table set email = 
replace(
 email,
 substring_index(substring_index(email,'@',-1),'.',1),
 concat(substring_index(substring_index(email,'@',-1),'.',1),'1')
) ;