[英]SQL Server remove part of string between characters
I have emails that look like this: 我有这样的电子邮件:
john.doe.946a9979-2951-4852-9e79-ad03eb0c1e5d@gmail.com
I am trying to get this output: 我正在尝试获得以下输出:
john.doe@gmail.com
I have this so far.... it's close. 到目前为止,我已经知道了...。
SELECT
Caller = REPLACE(Caller,
SUBSTRING(Caller,
CHARINDEX('.', Caller),
CASE WHEN CHARINDEX('@', Caller, CHARINDEX('.', Caller)) > 1 THEN
CHARINDEX('@', Caller, CHARINDEX('.', Caller)) - CHARINDEX('.', Caller)
ELSE
LEN(Caller)
END ) , '')
FROM
some.table
Hmmm. 嗯 I suspect the string you want to remove is fixed in length. 我怀疑您要删除的字符串长度固定。 So how about: 那么如何:
select stuff(caller, charindex('@',caller ) - 37, 37, '')
If you have SS 2016 or later, you can use R code to do it - granted I don't know about speed on larger data so be wary if its a production environment. 如果您使用的是SS 2016或更高版本,则可以使用R代码执行此操作-因为我不知道大数据的速度,因此请警惕生产环境。 Also be warned Regexp isn't my strongest area so you may want to check that portion. 还请注意,Regexp不是我最擅长的领域,因此您可能需要检查一下这一部分。
DECLARE @dummyScript NVARCHAR(1000) = '
SELECT * FROM
(VALUES (''john.doe.946a9979-2951-4852-9e79-ad03eb0c1e5d@gmail.com''),
(''jane whoever 1234453-534343@yahoo.com'') ) t (Email)
'
DECLARE @myRcode NVARCHAR(600)
SET @myRcode = 'OutputDataset <- data.frame(Email_Cleaned = gsub("[0-9]+.+@", "@", InputDataSet$Email)) '
DECLARE @CleanedTable TABLE (Email_Cleaned VARCHAR(500))
INSERT INTO @CleanedTable
EXEC sp_execute_external_script
@language = N'R'
,@script = @myRcode
,@input_data_1 = @dummyScript
,@input_data_1_name = N'InputDataSet'
,@output_data_1_name = N'OutputDataset'
SELECT * FROM @CleanedTable
Here is a simpler method using LEFT()
, RIGHT()
, and CHARINDEX()
functions 这是使用LEFT()
, RIGHT()
和CHARINDEX()
函数的一种更简单的方法
DECLARE @Caller VARCHAR(MAX) = 'john.doe.946a9979-2951-4852-9e79-ad03eb0c1e5d@gmail.com'
SELECT
LEFT(@Caller, CHARINDEX('.', @Caller, CHARINDEX('.', @Caller) + 1) - 1) + RIGHT(@Caller, LEN(@Caller) - CHARINDEX('@', @Caller) + 1) Email
The left side will get all the characters until the second dot, and the right side will get the characters from @ sign to the end of characters. 左侧将获取所有字符,直到第二个点,而右侧将获取从@符号到字符末尾的字符。
Try like below 尝试如下
SELECT
REPLACE(CALLER,
Substring(CALLER,
PATINDEX('.[0-9]%@', CALLER),
PATINDEX('@', CALLER ) )
,'@')
From Table
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.