我有一个带有电子邮件地址的数据库,总共 15 个字符。
有些是 14 个字符长,它们有相同的共同点,它们在第 3 个0索引处的名称中缺少 a。
我的 id 号码有一个类似的问题,但这很容易解决,因为我必须将 0 推到第一个索引。
我的预期结果应该更改'aa-001@test.me'为'aa-0001@test.me'.
我有一个带有电子邮件地址的数据库,总共 15 个字符。
有些是 14 个字符长,它们有相同的共同点,它们在第 3 个0索引处的名称中缺少 a。
我的 id 号码有一个类似的问题,但这很容易解决,因为我必须将 0 推到第一个索引。
我的预期结果应该更改'aa-001@test.me'为'aa-0001@test.me'.
要在具有 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