Разделить подстроку в строке - PullRequest
0 голосов
/ 24 мая 2019

У меня есть записи электронных писем, которые включают такие символы, как 'nr', и некоторые цифры с ним, например, examplenr@example.comnr122342 Здесь первый nr это нормально, но после .com я хочу избавиться от этой части 'nr122342'. Я хочу использовать SQL-запрос, чтобы избавиться от этого, чтобы получить только оригинальный адрес электронной почты. Пожалуйста, сообщите с соответствующей командой SQL.

Ответы [ 4 ]

0 голосов
/ 24 мая 2019

Вы можете использовать функцию 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)
0 голосов
/ 24 мая 2019

Используя STUFF и CHARINDEX, это может быть возможно:

SEELCT STUFF(Email, CHARINDEX('.com', Email, 1) + LEN('.com'), LEN(Email), '') AS Email
FROM TableName
0 голосов
/ 24 мая 2019

вы можете попробовать что-то вроде следующего:

   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
0 голосов
/ 24 мая 2019

Вы можете использовать LEFT и CHARINDEX;CHARINDEX функция возвращает позицию выражения, которое вы ищете, в вашем случае 'nr'.

declare @txt as varchar(50) = 'example@example.comnr122342'

select LEFT(@txt, CHARINDEX('nr', @txt, 1)-1)
...