我有一个专栏(让我们说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> ')
任何更好,更有效的方式?
提前致谢。
答案 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) )
)