我是SQL新手,我想知道如何找到特殊字符之间的单词? E.g我想从 ram @ gmail.com,ram @ yahoo.com
获得 gmail,yahoo答案 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