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

邮件地址值:

正如您所看到的某些值,它可以完成工作,但它并不是我想要的。 我真正想看到的值应该是这样的:

查询应该如何获得上面的结果?

您可以使用 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