【问题标题】:Split substring in string在字符串中拆分子字符串
【发布时间】:2019-10-11 04:15:27
【问题描述】:

我有电子邮件记录,其中包含诸如“nr”之类的字符和一些带有它的数字,例如 examplenr@example.comnr122342 这里第一个 nr 没问题,但是在 .com 之后我想摆脱这个 'nr122342' 部分。我想使用 SQL 查询来摆脱这种情况,只获取原始电子邮件地址。请使用适当的 SQL 命令告知。

【问题讨论】:

    标签: sql regex presto


    【解决方案1】:

    您可以使用LEFTCHARINDEXCHARINDEX 函数返回您正在查看的表达式的位置,在您的情况下为“nr”。

    declare @txt as varchar(50) = 'example@example.comnr122342'
    
    select LEFT(@txt, CHARINDEX('nr', @txt, 1)-1)
    

    【讨论】:

    • 感谢 Valerica 的快速回复,我已经编辑了这个问题。我在 Presto 环境中,不幸的是我不能使用 I CHARINDEX。
    • 对不起,伙计……不幸的是,我无法为您提供帮助。也许如果你在 presto 中搜索 CHARINDEX 函数的等价物,你会发现一些东西:)
    【解决方案2】:

    使用STUFFCHARINDEX,这是可能的:

    SEELCT STUFF(Email, CHARINDEX('.com', Email, 1) + LEN('.com'), LEN(Email), '') AS Email
    FROM TableName
    

    【讨论】:

      【解决方案3】:

      您可以尝试以下方法:

         CREATE FUNCTION dbo.StringBeforeLastIndex(@source nvarchar(80), @pattern char)
         RETURNS nvarchar(80)
         BEGIN  
               DECLARE @lastIndex int
               SET @lastIndex = (LEN(@source)) -  CHARINDEX(@pattern, REVERSE(@source)) 
      
             RETURN SUBSTRING(@source, 0, @lastindex + 1) 
      
        END;  
        GO
      

      【讨论】:

        【解决方案4】:

        您可以使用regexp_extract 函数提取字符串中除了最后一部分(nr 后跟一个数字)之外的所有内容

        WITH data(x) AS (VALUES 'examplenr@example.comnr122342')
        SELECT regexp_extract(x, '(.+)nr\d+$', 1)
        FROM data
        

        产生:

                 _col0
        -----------------------
         examplenr@example.com
        (1 row)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-04-28
          • 2014-09-26
          • 2015-01-16
          • 2015-12-28
          • 2015-12-18
          • 2011-11-25
          • 2018-09-07
          相关资源
          最近更新 更多