SQL - 如何在SQL中获取特殊字符之间的单词

时间:2016-12-27 07:34:38

标签: sql sql-server oracle

我是SQL新手,我想知道如何找到特殊字符之间的单词? E.g我想从 ram @ gmail.com,ram @ yahoo.com

获得 gmail,yahoo

5 个答案:

答案 0 :(得分:0)

尝试如下: (对于变量)

v.getContext()

或 (对于表格中的列)

DECLARE @MAIL VARCHAR(200)='ram@gmail.com'
SET @MAIL=(SUBSTRING(REVERSE(@MAIL),CHARINDEX('.',REVERSE(@MAIL))+1,LEN(@MAIL)))
SELECT (SUBSTRING(REVERSE(@MAIL),CHARINDEX('@',REVERSE(@MAIL))+1,LEN(@MAIL)))

答案 1 :(得分:0)

假设您使用的是Oracle:

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

答案 2 :(得分: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;

您可以在表查询中使用它,而不是仅在一个变量上使用它。 此外,它适用于一个字符串中的多个电子邮件(变量)

答案 3 :(得分: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/

答案 4 :(得分:0)

的Oracle

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