我的表格中有很多条目 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
单个查询是否可以替换最后一次出现的“。” ???
答案 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')
) ;