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

问题描述:

我是SQL新手,我想知道如何找到特殊字符之间的单词?例如,我想从RAM @ gmail.com得到Gmail,雅虎,RAM @ yahoo.comSQL - 如何获取SQL中特殊字符之间的单词

+5

您使用的是MS SQL Server还是Oracle? (答案将取决于您使用的产品。) – jarlh

尝试如下: (变量)

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 

假设你正在使用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 

,然后使用查询让您的数据:

SELECT 
    LEFT([str], CHARINDEX('.', [str]) -1) 
FROM 
    [dbo].[str__split](@email, '@') 
WHERE 
     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 

,如果你需要更多的描述,你可以在这个网站找到它

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

甲骨文

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