比较sql中逗号分隔的值
我试图编写一个函数来比较SQL中逗号分隔的值 我从互联网上获取了一些代码:比较sql中逗号分隔的值,sql,sql-server,sql-server-2008,csv,Sql,Sql Server,Sql Server 2008,Csv,我试图编写一个函数来比较SQL中逗号分隔的值 我从互联网上获取了一些代码: SELECT CASE WHEN EXISTS ( SELECT 1 FROM dbo.Split(@v1) WHERE ', ' + LTRIM(@v2) + ',' LIKE '%, ' + LTRIM(Item) + ',%' ) THEN 1 ELSE 0 END; 然后我做一个函数: CREATE FUNCTION [dbo].[fnCompareCSVString] ( @s
SELECT CASE WHEN EXISTS
(
SELECT 1 FROM dbo.Split(@v1)
WHERE ', ' + LTRIM(@v2) + ','
LIKE '%, ' + LTRIM(Item) + ',%'
) THEN 1 ELSE 0 END;
然后我做一个函数:
CREATE FUNCTION [dbo].[fnCompareCSVString]
(
@str1 nvarchar(50),
@str2 nvarchar(50)
)
RETURNS int
AS
BEGIN
SELECT CASE WHEN EXISTS
(
SELECT 1 FROM dbo.Split(@str1)
WHERE ', ' + LTRIM(@str2) + ','
LIKE '%, ' + LTRIM(Item) + ',%'
) THEN 1 ELSE 0 END;
END
我不擅长SQL,我知道这是错误的
问题:
我想写一个函数来比较逗号分隔的值,它将采用两个值(逗号分隔的值),比较后返回值将为true或false
在这个SQL函数中我必须做哪些更改?这就是您想要的吗 正确/错误结果
-- matches only those values which exist in both CSV sets
SELECT T1.[Item], CASE WHEN T2.[Item] IS NULL THEN 0 ELSE 1 END AS [Match]
FROM [dbo].[Split]('val1,val2,val3', ',') AS T1
LEFT JOIN [dbo].[Split]('val3,val4', ',') AS T2 on T1.[Item] = T2.[Item]
-- matches only those values which exist in both CSV sets
SELECT T1.[Item]
FROM [dbo].[Split]('val1,val2,val3', ',') AS T1
INNER JOIN [dbo].[Split]('val3,val4', ',') AS T2 on T1.[Item] = T2.[Item]
返回
Item Match
val1 0
val2 0
val3 1
Item
val3
仅真实匹配
-- matches only those values which exist in both CSV sets
SELECT T1.[Item], CASE WHEN T2.[Item] IS NULL THEN 0 ELSE 1 END AS [Match]
FROM [dbo].[Split]('val1,val2,val3', ',') AS T1
LEFT JOIN [dbo].[Split]('val3,val4', ',') AS T2 on T1.[Item] = T2.[Item]
-- matches only those values which exist in both CSV sets
SELECT T1.[Item]
FROM [dbo].[Split]('val1,val2,val3', ',') AS T1
INNER JOIN [dbo].[Split]('val3,val4', ',') AS T2 on T1.[Item] = T2.[Item]
返回
Item Match
val1 0
val2 0
val3 1
Item
val3
分割功能
CREATE FUNCTION [dbo].[Split]
(
@s VARCHAR(max),
@split CHAR(1)
)
RETURNS @temptable TABLE ([Item] VARCHAR(MAX))
AS
BEGIN
DECLARE @x XML
SELECT @x = CONVERT(xml,'<root><s>' + REPLACE(@s,@split,'</s><s>') + '</s></root>');
INSERT INTO @temptable
SELECT [Value] = T.c.value('.','varchar(20)')
FROM @X.nodes('/root/s') T(c);
RETURN
END;
创建函数[dbo].[Split]
(
@s VARCHAR(最大值),
@拆分字符(1)
)
返回@tentable表([Item]VARCHAR(MAX))
作为
开始
声明@x XML
选择@x=CONVERT(xml),+REPLACE(@s,@split,)+“”);
插入@attreable
选择[Value]=T.c.Value('.','varchar(20)')
从@X.nodes('/root/s')T(c);
返回
结束;
看看你是否能说出一个明确的问题。一些输入和输出示例有助于澄清您的查询。我知道很多老兵都会问“你尝试过什么”,但这些信息实际上并不有用,所以如果你觉得有必要,请在最后列出。如果你不太懂SQL,你应该改变数据结构,以便以更兼容SQL的方式存储字符串(即字符串中每个值一行,多行代表一个字符串). 嗯,即使你很了解SQL,那也会很有用。你想要两个CSV列表之间的差异或匹配列表吗?嗨,凯恩…我想要两个CSV之间的匹配如果任何一个匹配,那么返回true,否则返回false我想要分割,比较然后在一个函数中返回true或false我想在存储过程中使用此函数我将传递两个参数,分别为str1(逗号分隔值)和str2(逗号分隔值)。您好,谢谢您的帮助…这将对我有所帮助,但根据我们的要求,我无法修改您的代码,因为我不擅长SQL。。。。在我的存储过程中,我必须比较两个CSV字符串,然后如果任何一个匹配,则返回true else false……因此我想编写一个函数……正如我在问题中所写的,这工作正常……任何一个可以在SQL函数中转换此SP并返回true或false(现在返回匹配字)