2016-12-27 49 views

回答

0

嘗試如下: (變量)

DECLARE @MAIL VARCHAR(200)='[email protected]' 
SET @MAIL=(SUBSTRING(REVERSE(@MAIL),CHARINDEX('.',REVERSE(@MAIL))+1,LEN(@MAIL))) 
SELECT (SUBSTRING(REVERSE(@MAIL),CHARINDEX('@',REVERSE(@MAIL))+1,LEN(@MAIL))) 

或 (列表)

CREATE TABLE mails (MAIL VARCHAR(MAX)) 
INSERT INTO mails VALUES ('[email protected]') 
INSERT INTO mails VALUES ('[email protected]') 

SELECT SUBSTRING((SUBSTRING(MAIL,CHARINDEX('@',MAIL)+1,LEN(MAIL))),0,CHARINDEX('.',(SUBSTRING(MAIL,CHARINDEX('@',MAIL)+1,LEN(MAIL))))) FROM mails 
0

假設你正在使用Oracle:

select regex_replace(email,'.*@([^\.]*).*)', '\1') from my_table; 
0

您可以使用用戶定義函數來分割字符串一樣:

CREATE FUNCTION [dbo].[str__split](
    @str   NVARCHAR(MAX) 
    ,@delimiter  NVARCHAR(MAX) 
) 
RETURNS @split TABLE(
    [str] NVARCHAR(MAX) 
) 
AS 
BEGIN 

    INSERT INTO @split(
     [str] 
    ) 
    SELECT 
     [X].[C].[value]('(./text())[1]', 'nvarchar(4000)') 
    FROM 
     ( 
      SELECT 
       [X] = CONVERT(XML, '<i>' + REPLACE(@str, @delimiter, '</i><i>') + '</i>').query('.') 
     )     AS [A] 
    CROSS APPLY 
     [X].[nodes]('i') AS [X]([C]); 

    RETURN; 

END 

,然後使用查詢讓您的數據:

SELECT 
    LEFT([str], CHARINDEX('.', [str]) -1) 
FROM 
    [dbo].[str__split](@email, '@') 
WHERE 
     CHARINDEX('.', [str]) <> 0; 

可以在表中查詢使用,不超過一個變量只要。 (可變)

0

你好我認爲這是商業的事情,所以你最有可能,但它在代碼部分不在數據庫部分,你可以處理它如此之快易 然而

SELECT RIGHT(Email, LEN(Email) - CHARINDEX('@', email)) Domain , 
COUNT(Email) EmailCount 
FROM dbo.email 
WHERE LEN(Email) > 0 
GROUP BY RIGHT(Email, LEN(Email) - CHARINDEX('@', email)) 
ORDER BY EmailCount DESC 

,如果你需要更多的描述,你可以在這個網站找到它

http://blog.sqlauthority.com/2011/06/18/sql-server-selecting-domain-from-email-address/

0

甲骨文

select regexp_substr(email,'@([^.]+)',1,1,'',1) from mytable