如何从SQL Server中特定列的逗号分隔列表中标识值

时间:2014-08-04 08:13:04

标签: sql-server sql-server-2008

我有一个专栏(让我们说Email),它包含一些逗号分隔格式的电子邮件ID(abcd@gmail.com,pqrst@yahoo.co.in,mnop@outlook.com)。

现在,我的查询应在此列上搜索此列中是否存在给定的电子邮件ID。

目前我正在通过转换为xml进行检查。

SELECT @EmailIds = EmailId 
FROM Tablename 
WHERE email= @emailid                   

SELECT @X = CONVERT(xml,' <root> <s>' + REPLACE(@EmailIds,@Split,'</s> <s>') + '</s>   </root> ')

任何更好,更有效的方式?

提前致谢。

2 个答案:

答案 0 :(得分:1)

我可能有点不合适,但是只是在逗号分隔的列中搜索电子邮件,不会有类似的命令吗?

select Email from Tablename
where Email LIKE '%,' + @emailid + ',%'
or Email like  @emailid + ',%'
or Email like '%,' +  @emailid

答案 1 :(得分:0)

你可以通过创建一个函数来做到这一点,例如:

CREATE FUNCTION [dbo].[GetTableFromCommaSeparated]
(

  @StringInput VARCHAR(MAX)
)
RETURNS @tmp TABLE ( Id VARCHAR(500))
AS 
BEGIN


    DECLARE @OutputTable TABLE ( [String] VARCHAR(MAX) )

    DECLARE @String VARCHAR(MAX)

    WHILE LEN(@StringInput) > 0 
        BEGIN
            SET @String = LEFT(@StringInput,
                               ISNULL(NULLIF(CHARINDEX(',', @StringInput)
                                             - 1, -1), LEN(@StringInput)))
            SET @StringInput = SUBSTRING(@StringInput,
                                         ISNULL(NULLIF(CHARINDEX(',',
                                                          @StringInput), 0),
                                                LEN(@StringInput)) + 1,
                                         LEN(@StringInput))
            INSERT  INTO @tmp
                    ( Id )
            VALUES  ( @String )
        END
    RETURN

END



SELECT EmailId 
FROM Tablename 
WHERE email IN (
                  SELECT    *
                  FROM      dbo.GetTableFromCommaSeparated(@emailid) )
                )