首先创建如下用户定义函数来拆分逗号分隔值
create FUNCTION [dbo].[Split] (
@InputString VARCHAR(8000),
@Delimiter VARCHAR(50)
)
RETURNS @Items TABLE (
Item VARCHAR(8000)
)
AS
BEGIN
IF @Delimiter = ' '
BEGIN
SET @Delimiter = ','
SET @InputString = REPLACE(@InputString, ' ', @Delimiter)
END
IF (@Delimiter IS NULL OR @Delimiter = '')
SET @Delimiter = ','
DECLARE @Item VARCHAR(8000)
DECLARE @ItemList VARCHAR(8000)
DECLARE @DelimIndex INT
SET @ItemList = @InputString
SET @DelimIndex = CHARINDEX(@Delimiter, @ItemList, 0)
WHILE (@DelimIndex != 0)
BEGIN
SET @Item = SUBSTRING(@ItemList, 0, @DelimIndex)
INSERT INTO @Items VALUES (@Item)
-- Set @ItemList = @ItemList minus one less item
SET @ItemList = SUBSTRING(@ItemList, @DelimIndex+1, LEN(@ItemList)[email protected])
SET @DelimIndex = CHARINDEX(@Delimiter, @ItemList, 0)
END -- End WHILE
IF @Item IS NOT NULL -- At least one delimiter was encountered in @InputString
BEGIN
SET @Item = @ItemList
INSERT INTO @Items VALUES (@Item)
END
-- No delimiters were encountered in @InputString, so just return @InputString
ELSE INSERT INTO @Items VALUES (@InputString)
RETURN
END -- End Function
最终查询
select EmailAddress from [dbo].[SomeTable1] where EmailAddress in
(select item from [dbo].[SomeTable2] cross apply dbo.Split(Emails,','))
@JohnCappelletti我认为EmailAddress的将是更大的字符串的所有电子邮件和逗号分隔和它会匹配两者之间出现的电子邮件地址,也就是两边都是','吗? –
@JibinBalachandran想想看,双方的逗号没有必要,但它没有任何伤害 –
@JohnCappelletti'EmailAddress包含 (选择[dbo]。[SomeTable2]的电子邮件)',你认为哪一个是逗号分开的电子邮件地址?我认为'EmailAddress'将会是更大的字符串,我们应该在其中搜索电子邮件。我不确定。如我错了请纠正我。 –