【问题标题】:Wildcarding for email in SQL ServerSQL Server 中电子邮件的通配符
【发布时间】:2015-07-17 16:49:45
【问题描述】:

这是表格中的示例电子邮件数据

2.3|[johnnyappleseed@example.com]

以下是我已经研究了一段时间的查询:

SELECT * FROM WS_TRANSACTION
WHERE SERVICE_ID = 'GETUSERTOKENLOGIN' 
       AND SERVICE_ID LIKE '%@%'

这应该做的是给我这个表中的数据,并使列 service_id 只包含电子邮件,比如 johnnyappleseed 电子邮件。是否有一个用于 SQL 的通配符,它​​将删除那些无用的东西,以便它只描绘电子邮件,还是我必须以不同的方式解决这个问题?

我尝试使用百分号来获取电子邮件,但我相信它会删除 @ 之前和之后的所有内容,这不是我想要的。

任何帮助都会非常感激

【问题讨论】:

  • 所以你只需要电子邮件中@之前的单词吗?
  • 不,我需要整封电子邮件。我不需要 2.3 | [ ] 东西。抱歉,我知道这可能有点误导
  • 您的数据库中的 [ ] 之间有电子邮件换行吗?
  • 我猜他们就是这样登录的
  • 哪里只找到一行。 where 或通配符不会修改任何内容。您需要将搜索与格式化分开。正则表达式是提取该信息的最佳方式,而正则表达式并未内置于 SQL 中。

标签: sql sql-server tsql wildcard


【解决方案1】:

我认为您可以获取子字符串来获取电子邮件,正如您所说,您将电子邮件包装在方括号“[]”中,所以使用 SubString()

Declare @a varchar(max)
SET @a = '2.3|[johnnyappleseed@example.com]'
SELECT  SUBSTRING(@a,CharIndex('[',@a)+1,(CharIndex(']',@a)-CharIndex('[',@a))-1);

SEE DEMO

【讨论】:

    【解决方案2】:

    如果您的包含电子邮件的列会自动记录您所代表的数据,并且您只希望使用电子邮件部分:

    replace(replace(SUBSTRING('2.3 | [johnnyappleseed@example.com]', (charindex( '[','2.3 | [johnnyappleseed@example.com]')), LEN('2.3 | [johnnyappleseed@example.com]')),'[',''),']','')
    

    输出是

    johnnyappleseed@example.com
    

    【讨论】:

      【解决方案3】:

      如果字符串开头和结尾的字符长度始终相同,则可以使用 LEFT 和 RIGHT 函数,以及像这样的 LEN 函数。

      SELECT LEFT(RIGHT(SERVICE_ID,LEN(SERVICE_ID)-5),LEN(SERVICE_ID)-6)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-04-04
        • 1970-01-01
        • 1970-01-01
        • 2011-01-14
        • 1970-01-01
        • 2021-07-14
        • 2013-03-31
        相关资源
        最近更新 更多