【问题标题】:SQL JOINS in SSMSSSMS 中的 SQL JOINS
【发布时间】:2017-04-12 19:42:16
【问题描述】:

我有两个表,需要根据电子邮件 ID 加入它们。让我举例说明一下

如果 email_id 中 @ 之后存在公司名称,则需要使用第 1 列的电子邮件 ID 更新第 2 列

我相信我们需要编写一个从@之后开始并在 (.) 之前结束的子字符串并进行模式匹配,但我不知道该怎么做。如果有人能帮我解决这个问题,我将不胜感激。

提前致谢!!

【问题讨论】:

  • 请正确对齐您的文字,它看起来很糟糕
  • 请使用文本而不是图像。如果需要,这使我们更容易复制。
  • 你为什么不在'abcdus'中包含'us'?关于“排除这些后缀”可能还有哪些其他规则?总而言之,这看起来像是一个要尝试和“解决”的可怕问题,而不是您想要在生产中运行的东西……最多您想要进行数据转换以实际提取您需要的信息到他们自己的列,因此您可以进行正确(有效)的连接。
  • 正如发布的那样,这没有任何意义。你想做什么?你可以考虑从这里开始。 spaghettidba.com/2015/04/24/…
  • 请阅读meta.stackoverflow.com/questions/285551/… 和接受的答案

标签: sql sql-server sql-server-2008 sql-server-2008-r2


【解决方案1】:

你可以试试这个查询

 update TableA

 set TableA.Column2= Table2.column1

 From TableA inner join Table2 
 on TableA.column1 like  CONCAT('%', left(RIGHT(Table2.column1,LEN(Table2.column1)-CHARINDEX('@',Table2.column1)),LEN(RIGHT(Table2.column1,LEN(Table2.column1)-CHARINDEX('@',Table2.column1)))-CHARINDEX('.',RIGHT(Table2.column1,LEN(Table2.column1)-CHARINDEX('@',Table2.column1)))) ,'%')

【讨论】:

    【解决方案2】:

    根据我的理解,以下查询将满足要求。

    SELECT A.COMPANYNAME, B.MAILID
    FROM A 
    JOIN B ON A.COMPANYNAME =
      B.SUBSTRING(MAILID, CHARINDEX('@',MAILID) + 1, PATINDEX('%.com%', MAILID) - CHARINDEX('@', MAILID) - 1) 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-09
      • 2014-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多