SQL 如何显示最后一个 '.' 之前的所有字符在我的数据库中的@之后
SQL how to show all characters before the last '.' after the @ in my database
(注意数据库是荷兰语的,所以不要介意这些奇怪的名字。)
我尝试创建的查询应该显示电子邮件地址中最后一个点 ('.') 之前的所有字符,包括最后一个点 ('.')。但是我使用的查询(但当然不起作用)显示了下面的数据。
SELECT LEFT(mailadres, LENGTH(substring_index(mailadres, '.', 2))+1) AS edited_values, mailadres
FROM reviewers
邮件地址值:
- Brechtje.Eefting@hotmail.
- Martijn.Rokx@gmail.
- Rosemijn.Stegers@gmail.
- Ans.Vogelaar@gmail.
- Flip.van.
- Dirck.Boesten@gmail.
- Kobus.van.
- Rikkert.van.
- Lourens.van.
正如您所看到的某些值,它可以完成工作,但它并不是我想要的。
我真正想看到的值应该是这样的:
- Brechtje.Eefting@hotmail.
- Martijn.Rokx@gmail.
- Rosemijn.Stegers@gmail.
- Ans.Vogelaar@gmail.
- Flip.van.Korsten@gmail.
- Dirck.Boesten@gmail.
- Kobus.van.Dijkstra@gmail.
- Rikkert.van.Hogen@gmail.
查询应该如何获得上面的结果?
您可以使用 regexp_replace()
:
select regexp_replace(email, '^(.*[.])[^.]*$', '')
如果你想要最后一个 .
,你应该使用负计数 substring_index:
left(mailadres, char_length(mailadres)-char_length(substring_index(mailadres,'.',-1))
请注意,如果没有 .
,此 substring_index 将 return 整个字符串,导致两个长度相等并且 left
被要求输入 0 个字符结果给出一个空字符串。如果你想在没有 .
的情况下 returned 整个 mailadres,你必须明确检查:
if(instr(mailadres,'.'),left(mailadres, char_length(mailadres)-char_length(substring_index(mailadres,'.',-1))),mailadres)
所以完整:
SELECT
if(instr(mailadres,'.'),left(mailadres, char_length(mailadres)-char_length(substring_index(mailadres,'.',-1))),mailadres) AS edited_values,
mailadres
FROM reviewers
(注意数据库是荷兰语的,所以不要介意这些奇怪的名字。)
我尝试创建的查询应该显示电子邮件地址中最后一个点 ('.') 之前的所有字符,包括最后一个点 ('.')。但是我使用的查询(但当然不起作用)显示了下面的数据。
SELECT LEFT(mailadres, LENGTH(substring_index(mailadres, '.', 2))+1) AS edited_values, mailadres
FROM reviewers
邮件地址值:
- Brechtje.Eefting@hotmail.
- Martijn.Rokx@gmail.
- Rosemijn.Stegers@gmail.
- Ans.Vogelaar@gmail.
- Flip.van.
- Dirck.Boesten@gmail.
- Kobus.van.
- Rikkert.van.
- Lourens.van.
正如您所看到的某些值,它可以完成工作,但它并不是我想要的。 我真正想看到的值应该是这样的:
- Brechtje.Eefting@hotmail.
- Martijn.Rokx@gmail.
- Rosemijn.Stegers@gmail.
- Ans.Vogelaar@gmail.
- Flip.van.Korsten@gmail.
- Dirck.Boesten@gmail.
- Kobus.van.Dijkstra@gmail.
- Rikkert.van.Hogen@gmail.
查询应该如何获得上面的结果?
您可以使用 regexp_replace()
:
select regexp_replace(email, '^(.*[.])[^.]*$', '')
如果你想要最后一个 .
,你应该使用负计数 substring_index:
left(mailadres, char_length(mailadres)-char_length(substring_index(mailadres,'.',-1))
请注意,如果没有 .
,此 substring_index 将 return 整个字符串,导致两个长度相等并且 left
被要求输入 0 个字符结果给出一个空字符串。如果你想在没有 .
的情况下 returned 整个 mailadres,你必须明确检查:
if(instr(mailadres,'.'),left(mailadres, char_length(mailadres)-char_length(substring_index(mailadres,'.',-1))),mailadres)
所以完整:
SELECT
if(instr(mailadres,'.'),left(mailadres, char_length(mailadres)-char_length(substring_index(mailadres,'.',-1))),mailadres) AS edited_values,
mailadres
FROM reviewers