簡體   English   中英

SQL Server刪除字符之間的部分字符串

[英]SQL Server remove part of string between characters

我有這樣的電子郵件:

john.doe.946a9979-2951-4852-9e79-ad03eb0c1e5d@gmail.com

我正在嘗試獲得以下輸出:

john.doe@gmail.com

到目前為止,我已經知道了...。

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

我懷疑您要刪除的字符串長度固定。 那么如何:

select stuff(caller, charindex('@',caller ) - 37, 37, '')

如果您使用的是SS 2016或更高版本,則可以使用R代碼執行此操作-因為我不知道大數據的速度,因此請警惕生產環境。 還請注意,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

這是使用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

左側將獲取所有字符,直到第二個點,而右側將獲取從@符號到字符末尾的字符。

嘗試如下

    SELECT 
      REPLACE(CALLER,
      Substring(CALLER, 
        PATINDEX('.[0-9]%@', CALLER),
     PATINDEX('@', CALLER  ) )

          ,'@')

     From Table 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM