Mysql 如何向字符串中的特定索引添加字符
我有一个数据库的电子邮件地址,共15个字符 有些长度为14个字符,它们有相同的共同点,它们在第三个索引中的名称中缺少一个Mysql 如何向字符串中的特定索引添加字符,mysql,sql,string,sql-update,where-clause,Mysql,Sql,String,Sql Update,Where Clause,我有一个数据库的电子邮件地址,共15个字符 有些长度为14个字符,它们有相同的共同点,它们在第三个索引中的名称中缺少一个0 我的id号也有类似的问题,但这很容易解决,因为我必须将0推到第一个索引 我的预期结果应该是变化的'aa-001@test.me“至”aa-0001@test.me“要将0添加为电子邮件中的第4个字符(共14个字符),您只需使用SUBSTR: SELECT CONCAT(SUBSTR(email, 1, 3), '0', SUBSTR(email, 4)) FROM myta
0
我的id号也有类似的问题,但这很容易解决,因为我必须将0推到第一个索引
我的预期结果应该是变化的
'aa-001@test.me“
至”aa-0001@test.me“
要将0
添加为电子邮件中的第4个字符(共14个字符),您只需使用SUBSTR
:
SELECT CONCAT(SUBSTR(email, 1, 3), '0', SUBSTR(email, 4))
FROM mytable
WHERE LENGTH(email) = 14
另一个解决方案是使用REGEXP\u REPLACE
,正则表达式只匹配14个字符的电子邮件;这避免了使用WHERE
子句,因为与模式不匹配的电子邮件将原封不动地返回:
SELECT REGEXP_REPLACE(email, '^(.{3})(.{11})$', CONCAT('$1', '0', '$2'))
FROM t
D小提琴:
那么简单的方法呢?CONCAT(SUBSTR(…,1,3),'0',SUBSTR(…,3))
WITH t AS (SELECT 'aa-001@test.me' email UNION SELECT 'bb-0002@test.me')
SELECT CONCAT(SUBSTR(email, 1, 3), '0', SUBSTR(email, 4))
FROM t
WHERE LENGTH(email) = 14
| CONCAT(SUBSTR(email, 1, 3), '0', SUBSTR(email, 4)) |
| :----------------------------------------------------- |
| aa-0001@test.me |
WITH t AS (SELECT 'aa-001@test.me' email UNION SELECT 'bb-0002@test.me')
SELECT REGEXP_REPLACE(email, '^(.{3})(.{11})$', CONCAT('$1', '0', '$2'))
FROM t
| REGEXP_REPLACE(email, '^(.{3})(.{11})$', CONCAT('$1', '0', '$2')) |
| :---------------------------------------------------------------- |
| aa-0001@test.me |
| bb-0002@test.me