SQL-如何获取SQL中特殊字符之间的单词
我是SQL新手,我想知道如何在特殊字符之间找到单词?例如,我想从ram@gmail.com,ram@yahoo.com尝试以下操作: (适用于变量) 或 (对于表中的列)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
假设您正在使用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