1

我有一个带有电子邮件地址的数据库,总共 15 个字符。

有些是 14 个字符长,它们有相同的共同点,它们在第 3 个0索引处的名称中缺少 a。

我的 id 号码有一个类似的问题,但这很容易解决,因为我必须将 0 推到第一个索引。

我的预期结果应该更改'aa-001@test.me''aa-0001@test.me'.

4

1 回答 1

1

要在具有 140个字符的 s 中添加第 4email个字符,您可以简单地使用SUBSTR

SELECT CONCAT(SUBSTR(email, 1, 3), '0', SUBSTR(email, 4))
FROM mytable
WHERE LENGTH(email) = 14

另一种解决方案是使用REGEXP_REPLACE, 正则表达式只匹配 14 个字符的电子邮件;这避免了对WHERE子句的需要,因为与模式不匹配的电子邮件将被原封不动地返回:

SELECT REGEXP_REPLACE(email, '^(.{3})(.{11})$', CONCAT('$1', '0', '$2'))
FROM t

db<>fiddle在这里

 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   
于 2019-01-15T14:31:43.913 回答