Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL如何显示最后一个';之前的所有字符';在我的数据库中的@之后_Mysql_Sql_String_Substring - Fatal编程技术网

Mysql SQL如何显示最后一个';之前的所有字符';在我的数据库中的@之后

Mysql SQL如何显示最后一个';之前的所有字符';在我的数据库中的@之后,mysql,sql,string,substring,Mysql,Sql,String,Substring,(注意数据库是荷兰语的,所以不要介意奇怪的名字。) 我尝试创建的查询应该显示emailaddress之前的所有字符,包括最后一个点('.')。但是我使用的查询(当然不起作用)显示了下面的数据 SELECT LEFT(mailadres, LENGTH(substring_index(mailadres, '.', 2))+1) AS edited_values, mailadres FROM reviewers 邮件地址值: 布莱希杰。Eefting@hotmail. 马蒂恩。Rokx@gm

(注意数据库是荷兰语的,所以不要介意奇怪的名字。)

我尝试创建的查询应该显示emailaddress之前的所有字符,包括最后一个点('.')。但是我使用的查询(当然不起作用)显示了下面的数据

SELECT LEFT(mailadres, LENGTH(substring_index(mailadres, '.', 2))+1) AS edited_values, mailadres
FROM reviewers
邮件地址值:

  • 布莱希杰。Eefting@hotmail.
  • 马蒂恩。Rokx@gmail.
  • 罗斯米。Stegers@gmail.
  • 答案。Vogelaar@gmail.
  • 货车
  • 德克。Boesten@gmail.
  • 科布斯,范
  • 里克特·凡
  • 卢伦斯·范
正如你所看到的,对于一些价值观来说,它确实起到了作用,但这并不是我想要的。 我想要看到的值应该是这样的:

  • 布莱希杰。Eefting@hotmail.
  • 马蒂恩。Rokx@gmail.
  • 罗斯米。Stegers@gmail.
  • 答案。Vogelaar@gmail.
  • 货车。Korsten@gmail.
  • 德克。Boesten@gmail.
  • 科布斯,范。Dijkstra@gmail.
  • 里克特·凡。Hogen@gmail.

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

您可以使用
regexp\u replace()


如果您希望一直到最后一个
,则应使用带有子字符串索引的负计数:

left(mailadres, char_length(mailadres)-char_length(substring_index(mailadres,'.',-1))
请注意,如果没有
,则此子字符串索引将返回整个字符串,导致两个长度相等,
被要求输入0个字符,并给出一个空字符串。如果希望在没有
时返回整个邮件地址,则必须明确检查:

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(mailadres)-LENGTH(SUBSTRING_INDEX(mailadres,,,,,,-1))
Yup非常有效谢谢!)是的,它起作用了,另一个问题是子字符串索引“最多计数”还是“最多并包括”所选字符或字符串?子字符串索引返回一个字符串,而不是计数。使用-1时,它将在最后一个
之后返回子字符串,而不是在最后一个
之后返回子字符串。我尝试了{if(instr(mailadres,'.')、left(mailadres,length(mailadres)–length(substring_index(mailadres,'.',1))、mailadres}请注意,我对SQL非常陌生,因此我不知道if如何工作,以及在代码中放置它们的位置,因此它不工作,请您向我解释一下在代码中放置它们的位置好吗?我将if放在SELECT子句之后。另外,我如何在注释部分附上一段代码?啊,在mysql/mariadb的较新版本中,您必须使用char_length,not长度。在utf8中更新我的应答,字节长度可以大于字符长度,left需要字符。该电子邮件地址的长度返回24,字符长度为22。
SELECT
    if(instr(mailadres,'.'),left(mailadres, char_length(mailadres)-char_length(substring_index(mailadres,'.',-1))),mailadres) AS edited_values,
    mailadres
FROM reviewers