当前位置: 首页 > 面试题库 >

使用tsql从字符串中提取电子邮件地址

戚阳曜
2023-03-14
问题内容

我正在尝试从现有评论字段中提取电子邮件地址,并将其放入自己的列中。该字符串可能是这样的:“这是示例示例,电子邮件地址为someemail@domain.org”,或者从字面上看,电子邮件本身为“
someemail@domain.org”。

我认为最好的办法是找到’@’符号的索引并在两个方向上搜索,直到命中字符串的末尾或有空格为止。谁能帮我实现这一实现?


问题答案:

您可以'@'在字符串中搜索。然后,您在的LEFTRIGHT端获取字符串'@'。那么你要REVERSELEFT一侧,并得到第一次出现' '则让SUBSTRING从那里。然后REVERSE获取原始表格。相同的原则适用于RIGHT不做任何事情的一方REVERSE

示例字符串'some text someemail@domain.org some text'

  1. LEFT =’一些文本someemail’
  2. RIGHT =’@domain.org一些文字’
  3. 反向LEFT =’liameemos txet emos’
  4. SUBSTRING 直到第一个空格=’liameemos’
  5. REVERSE(4)=一封电子邮件
  6. SUBSTRING (2)直到第一个空格=’@ domain.org‘
  7. 结合5和6 ='someemail@domain.org‘

您的查询将是:

;WITH CteEmail(email) AS(
    SELECT 'someemail@domain.org' UNION ALL
    SELECT 'some text someemail@domain.org some text' UNION ALL
    SELECT 'no email'
)
,CteStrings AS(
    SELECT
        [Left] = LEFT(email, CHARINDEX('@', email, 0) - 1),
        Reverse_Left = REVERSE(LEFT(email, CHARINDEX('@', email, 0) - 1)),
        [Right] = RIGHT(email, CHARINDEX('@', email, 0) + 1)
    FROM CteEmail
    WHERE email LIKE '%@%'
)
SELECT *,
    REVERSE(
        SUBSTRING(Reverse_Left, 0, 
            CASE
                WHEN CHARINDEX(' ', Reverse_Left, 0) = 0 THEN LEN(Reverse_Left) + 1
                ELSE CHARINDEX(' ', Reverse_Left, 0)
            END
        )
    )
    +
    SUBSTRING([Right], 0,
        CASE
            WHEN CHARINDEX(' ', [Right], 0) = 0 THEN LEN([Right]) + 1
            ELSE CHARINDEX(' ', [Right], 0)
        END
    )
FROM CteStrings

样本数据

email
----------------------------------------
someemail@domain.org
some text someemail@domain.org some text
no email

结果

---------------------
someemail@domain.org
someemail@domain.org


 类似资料:
  • 问题内容: 我有一个非常大的.txt文件,其中散布着成千上万个电子邮件地址。它们都采用以下格式: 使Python循环遍历整个.txt文件以查找某个@domain字符串的所有实例,然后在<…>内获取地址的全部并将其添加到的最佳方法是什么?一个列表?我遇到的麻烦是不同地址的长度可变。 问题答案: 此代码以字符串形式提取电子邮件地址。逐行阅读时使用 如果您有多个电子邮件地址,请使用: 上面的正则表达式可

  • 问题内容: 在PHP中,我有一个像这样的字符串: 我如何仅获取电子邮件地址?有什么简单的方法来获取价值? 问题答案: 如果您不确定用空格分隔的字符串的哪一部分是电子邮件地址,则可以将字符串按空格分隔并使用 在每个子串上。

  • 问题内容: 给定以下电子邮件地址-someone@example.com-如何使用javascript从该地址提取某人? 谢谢。 问题答案: 匹配的正则表达式 安全检查 写成一行 带替换的正则表达式 安全检查 写成一行 分割字符串 安全检查 写成一行

  • 我在试着从他的电子邮件里得到一个用户名。我知道有一些简单的方法可以实现这一点,但它让我怀疑我是否可以只使用Regex来实现这一点。 让我们假设用户输入以下电子邮件:user.sure_name123@mail.co 从该字符串中,我想提取:user sure name

  • 问题内容: 我的意图是从网页获取电子邮件地址。我有页面来源。我正在逐行阅读页面源代码。现在,我想从我正在阅读的当前行中获取电子邮件地址。当前行可能有也可能没有电子邮件。我看到了很多正则表达式示例。但是它们大多数用于验证电子邮件地址。我想从页面来源获取电子邮件地址,但不进行验证。它应该在http://emailx.discoveryvip.com/正常工作 一些示例输入行是: 我想从示例1,2和3获

  • 我想从XSLT中的电子邮件地址中将名字的第一个字母和整个第二个名字替换为子字符串。不确定是否必须使用子字符串,然后使用concat函数,或者如何执行,因为我不知道电子邮件字符的标准长度。 输入:伊曼。ahmed@yahoo.com 期望输出:eahmed 它应该是这样的: 谢谢你的支持!