SQL - 如何获取SQL中特殊字符之间的单词
问题描述:
我是SQL新手,我想知道如何找到特殊字符之间的单词?例如,我想从RAM @ gmail.com得到Gmail,雅虎,RAM @ yahoo.comSQL - 如何获取SQL中特殊字符之间的单词
答
尝试如下: (变量)
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
您使用的是MS SQL Server还是Oracle? (答案将取决于您使用的产品。) – jarlh