0
DECLARE @str as varchar(500) = '</FONT><FONT SIZE=2 FACE="Arial">atul.kale@bca.net</FONT><FONT SIZE=2 FACE="Arial">'
SELECT substring(@str,patindex('%">%',@str),patindex('%</FONT>%',@str))

文字列から電子メールIDを取得しようとしてい@strます。

出力する必要があります。

atul.kale@bca.net

SQL Server の部分文字列をどのように処理すればよいかわかりません。

4

3 に答える 3

2

文字列"</FONT><FONT SIZE=2 FACE="Arial">"が電子メールアドレスの周りで一定である場合は、いつでもこれを試すことができます

DECLARE @str as varchar(500) = '</FONT><FONT SIZE=2 FACE="Arial">atul.kale@bca.net</FONT><FONT SIZE=2 FACE="Arial">'
SELECT REPLACE(@str,'</FONT><FONT SIZE=2 FACE="Arial">','')

一定でない場合

DECLARE @str as varchar(500) = '</FONT><FONT SIZE=2 FACE="Arial">atul.kale@bca.net</FONT><FONT SIZE=2 FACE="Arial">'
select substring(@str,patindex('%">%',@str)+2,patindex('%</FONT>%',substring(@str,patindex('%">%',@str)+3,len(@str))))
于 2012-07-16T10:42:46.363 に答える
0
DECLARE @str as varchar(500) = '</FONT><FONT SIZE=2 FACE="Arial">atul.kale@bca.net</FONT><FONT SIZE=2 FACE="Arial">' 

select substring(col,1,charindex('<',col)-1) as email from
(
    select substring(@str,charindex('">',@str)+2,len(@str)) as col
) as t
于 2012-07-16T10:26:09.897 に答える
0

これは私が試すアプローチです:

  1. 文字列から HTML タグを取り除く
  2. PATINDEX Workbenchの Phil Factors スクリプトを使用して、文字列から電子メール アドレスを抽出します。

文字列に複数の @ 記号が含まれていても、スクリプトは電子メール アドレスの一部ではないものを無視します。また、文字列内に複数の電子メール アドレスがある場合、このスクリプトは最初の 1 つだけを取得します。

--This script is NOT written by me. I have it in my laptop and at present i don't remember  who created this :(
CREATE FUNCTION [dbo].[StripHTML]( @text VARCHAR(MAX) ) 
RETURNS VARCHAR(MAX) 
AS
BEGIN
    DECLARE @textXML XML
    DECLARE @result VARCHAR(MAX)
    SET @textXML = @text;
    WITH doc(contents) AS
    (
        SELECT chunks.chunk.query('.') FROM @textXML.nodes('/') AS chunks(chunk)
    )
    SELECT @result = contents.value('.', 'varchar(max)') FROM doc
    RETURN @result
END
GO

--Variable declaration & test string
DECLARE @str AS VARCHAR(500) 
SET @str = 'Alpha Beta <FONT SIZE=2 FACE="Arial"> i will be @ gamma</font> one two three </FONT><FONT SIZE=2 FACE="Arial">atul.kale@bca.net</FONT><FONT SIZE=2 FACE="Arial"> i hate mondays'

--First lets strip HTML out of the given string
--I am storing it into the same variable may be you might want to use another one!
SELECT @str = dbo.udf_StripHTML(@str)

--Extract the Email ID from the given string. 
--Even if there are @ symbol within the string multiple times it ignore the one which is not part of email address
--if there are multiple email ids this script would list the first one ONLY
--Source: http://www.simple-talk.com/sql/t-sql-programming/patindex-workbench/
SELECT  
    CASE WHEN AtIndex=0 THEN '' --no email found
    ELSE RIGHT(head, PATINDEX('% %', REVERSE(head) + ' ') - 1) + LEFT(tail + ' ', PATINDEX('% %', tail + ' '))
    END EmailAddress
FROM 
(
    SELECT RIGHT(EmbeddedEmail, [len] - AtIndex) AS tail,
             LEFT(EmbeddedEmail, AtIndex) AS head, AtIndex
    FROM 
    (
        SELECT 
            PATINDEX('%[A-Z0-9-]@[A-Z0-9-]%', EmbeddedEmail+' ') AS AtIndex,
            LEN(EmbeddedEmail+'|')-1 AS [len], embeddedEmail
            FROM (
                  SELECT @str 
                 ) AS ListOfCompanies (EmbeddedEmail)
    )f
)g;
于 2012-07-16T12:55:52.510 に答える