【问题标题】:MySQL - How to parse string value inside of INSERT to find a sub-stringMySQL - 如何在 INSERT 中解析字符串值以查找子字符串
【发布时间】:2012-05-25 01:48:22
【问题描述】:

我从一个应该提供电子邮件地址的外部应用程序返回一个字符串值。但是,此字符串值有时会提供与电子邮件地址一起出现的显示名称。我只需要电子邮件地址,它位于 内,所以我认为我需要在 INSERT 语句中执行某种子字符串或 SELECT 子句。

这是我的INSERT 语句以及测试数据的样子:

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

【问题讨论】:

  • 您想提取电子邮件并在没有&lt; 的情况下存储。是这样吗?
  • 虽然 可以 使用 MySQL 的字符串操作函数来完成,但在尝试 INSERT 之前在应用程序中执行它可能会更好(这样你可以使用更高级的技术,例如正则表达式模式匹配)。

标签: mysql parsing email insert substring


【解决方案1】:

我同意@eggyal 的评论。但如果你必须这样做,方法如下:

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

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

【讨论】:

  • 大家好。我应该提到我无法更改提供字符串的应用程序,因为它是第 3 方应用程序。但是,上面的示例运行良好。谢谢。
  • 当然,但是您正在使用一些您自己的程序将您从外部应用程序接收到的数据输入 MySQL,不是吗?至少,您根据从应用程序收到的值生成的脚本就是该程序。因此,理想情况下,您应该在将数据插入 MySQL 之前对其进行预处理。 Pentaho 数据集成(又名 Kettle)是一个很棒的开源工具来做这些事情。
【解决方案2】:

据我了解您的问题,您想提取&lt;&gt;之间的电子邮件地址,以便您可以使用mysql函数

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

参考文献:

SUBSTRING

LENGTH

【讨论】:

  • 我认为问题不仅在于如何去除&lt;&gt;(如果存在),还在于如何去除任何主要的收件人姓名(其本身可能包含&lt;&gt; 字符)?
【解决方案3】:

您需要在实际插入数据库之前从字符串中提取电子邮件,因为它更容易。 如果您不确定以空格分隔的字符串的哪一部分是电子邮件地址,您可以用空格分割字符串并在每个子字符串上使用 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;
    }

【讨论】:

  • 这不是假设 OP 使用的是 PHP 吗?
猜你喜欢
  • 1970-01-01
  • 2019-10-01
  • 2011-07-13
  • 2012-05-25
  • 1970-01-01
  • 2021-04-21
  • 2020-06-11
相关资源
最近更新 更多