MySQL - 如何在INSERT中解析字符串值以查找子字符串

时间:2012-05-17 13:17:00

标签: mysql parsing email insert substring

我从一个应该提供电子邮件地址的外部应用程序中获取一个字符串值。但是,此字符串值有时会提供与电子邮件地址一起显示的显示名称。我只需要在< bracket>内的电子邮件地址,所以我想我需要在我的SELECT语句中做一些子字符串或INSERT子句。

以下是我的INSERT语句以及测试数据:

INSERT INTO tblInquiry
(fldInquiryFromEmail)
VALUES ('"\'Tim Lastname\'" <timm@testCCaddcompany.com>')

3 个答案:

答案 0 :(得分:1)

我同意@ eggyal的评论。但如果必须,请按以下方式进行:

INSERT INTO tblInquiry (fldInquiryFromEmail)
VALUES (substring_index(substring_index('"\'Tim Lastname\'" <timm@testCCaddcompany.com>', '<', -1), '>', 1))

请注意,即使您传入真实的电子邮件(没有尖括号),这仍然有效

答案 1 :(得分:0)

您需要在实际插入数据库之前从字符串中提取电子邮件,因为它更容易。 如果您不确定以空格分隔的字符串的哪一部分是电子邮件地址,则可以按空格拆分字符串,并在每个子字符串上使用PHP函数filter_var()

    //first, sanitize user input
    $str = filter_var($_POST['some_input'], FILTER_SANITIZE_STRING);

    //second, convert the string into array
    $str = explode(' ',$str);

    //third, check for valid email inside the array
    foreach ($str as $key=>$value) {         
      if (filter_var($value, FILTER_VALIDATE_EMAIL))
      echo $value;
    }

答案 2 :(得分:0)

据我了解您的问题,您希望在<>之间提取电子邮件地址,以便您可以使用mysql函数

SELECT SUBSTRING('<test@gmail.com>',2,LENGTH('<test@gmail.com>')-1)
//return test@gmail.com

参考文献:

SUBSTRING

LENGTH