【发布时间】:2019-10-11 04:15:27
【问题描述】:
我有电子邮件记录,其中包含诸如“nr”之类的字符和一些带有它的数字,例如 examplenr@example.comnr122342 这里第一个 nr 没问题,但是在 .com 之后我想摆脱这个 'nr122342' 部分。我想使用 SQL 查询来摆脱这种情况,只获取原始电子邮件地址。请使用适当的 SQL 命令告知。
【问题讨论】:
我有电子邮件记录,其中包含诸如“nr”之类的字符和一些带有它的数字,例如 examplenr@example.comnr122342 这里第一个 nr 没问题,但是在 .com 之后我想摆脱这个 'nr122342' 部分。我想使用 SQL 查询来摆脱这种情况,只获取原始电子邮件地址。请使用适当的 SQL 命令告知。
【问题讨论】:
您可以使用LEFT 和CHARINDEX;
CHARINDEX 函数返回您正在查看的表达式的位置,在您的情况下为“nr”。
declare @txt as varchar(50) = 'example@example.comnr122342'
select LEFT(@txt, CHARINDEX('nr', @txt, 1)-1)
【讨论】:
使用STUFF 和CHARINDEX,这是可能的:
SEELCT STUFF(Email, CHARINDEX('.com', Email, 1) + LEN('.com'), LEN(Email), '') AS Email
FROM TableName
【讨论】:
您可以尝试以下方法:
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
【讨论】:
您可以使用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)
【讨论】: