我有一个SQL Server表,其中包含一个包含多个电子邮件的列,例如Emails
的值由逗号分隔,如:
email1@email1.com,email2@email2.com,email3@email3.com
从另一个包含EmailAddress
列的表中,我需要过滤包含Emails
的记录,例如
select EmailAddress
from [dbo].[SomeTable1]
where EmailAddress contains (select Emails from [dbo].[SomeTable2])
答案 0 :(得分:1)
试试这个:
SELECT DISTINCT EmailAddress
FROM [dbo].[SomeTable1] A
INNER JOIN [dbo].[SomeTable2] B ON CHARINDEX(',' + Emails, + ',',',' + EmailAddress + ',')>0
使用CHARINDEX
检查Emails
中是否存在EmailAddress
,是否仅存在JOIN
表。
答案 1 :(得分:0)
Select *
From [dbo].[SomeTable1] A
Join [dbo].[SomeTable2] B
on charindex(','+EmailAddress ,','+Emails )>0
答案 2 :(得分:0)
select EmailAddress
from [dbo].[SomeTable1] tab1
where exists
(select 1
from [dbo].[SomeTable2] tab2
where '%,'+tab1.EmailAddress+',%' LIKE ','+tab2.Emails+',');
答案 3 :(得分:0)
首先创建一个用户定义的函数,如下所示,以分割逗号分隔值
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)-@DelimIndex)
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,','))