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

SQL-如何获取SQL中特殊字符之间的单词,sql,sql-server,oracle,Sql,Sql Server,Oracle,我是SQL新手,我想知道如何在特殊字符之间找到单词?例如,我想从ram@gmail.com,ram@yahoo.com尝试以下操作: (适用于变量) 或 (对于表中的列) 假设您正在使用Oracle: select regex_replace(email,'.*@([^\.]*).*)', '\1') from my_table; 您可以使用用户定义的函数拆分字符串,如: CREATE FUNCTION [dbo].[str__split]( @str NVARC

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

尝试以下操作: (适用于变量)

或 (对于表中的列)


假设您正在使用Oracle:

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

您可以使用用户定义的函数拆分字符串,如:

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
创建函数[dbo]。[str\uu split](
@str NVARCHAR(最大值)
,@分隔符NVARCHAR(最大值)
)
返回@splittable(
[str]NVARCHAR(最大值)
)
作为
开始
插入@split(
[str]
)
挑选
[十] [C].[value](“(./text())[1]”,以及“nvarchar(4000)”等)
从…起
( 
挑选
[十] =CONVERT(XML,“+REPLACE(@str,@delimiter,”)+”).query(“.”)
)作为[A]
交叉应用
[十] [节点]('i')作为[X]([C]);
返回;
结束
然后使用查询获取您的数据:

SELECT 
    LEFT([str], CHARINDEX('.', [str]) -1)  
FROM 
    [dbo].[str__split](@email, '@') 
WHERE  
        CHARINDEX('.', [str]) <>  0;
选择
左([str],CHARINDEX('.',[str])-1)
从…起
[dbo].[str_uusplit](@email,'@'))
哪里
CHARINDEX('.',[str])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
如果你需要更多的描述,你可以在这个网站上找到

甲骨文

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

您使用的是MS SQL Server还是Oracle?(答案将取决于您使用的产品。)
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
select regexp_substr(email,'@([^.]+)',1,1,'',1) from mytable