编写一个存储过程,它接受输入字符串并按字符拆分它们

约翰·科格德尔

我正在尝试在 SQL Server 中创建一个存储过程,该过程将从 C# 实体框架中使用。

我的主要重点是输入长字符串文本,然后按字符拆分该数据并返回匹配数据的值列表。

详细:

  • - 是数据类型名称与其值之间的分隔符
  • : 是 Type 和 ASIN 之间的分隔符
  • , 是两个不同值之间的分隔符

我想通过过滤的数据列表ASIN,并Type从这个存储过程。我在@DataString变量中获取了完整的文本字符串,但我不知道如何拆分文本并运行SELECT以返回所有数据。

有什么想法要做吗?提出您可能有的任何问题。

长文本字符串示例:

Type-1:ASIN-NsQf8,ASIN-YhQfu,ASIN-dpQf9,ASIN-rsWf3

未完成的SQL代码:

CREATE PROCEDURE dbo.lk_GetMatchingDataOfThirdparty 
     @DataString VARCHAR(MAX)
AS
BEGIN
    SET NOCOUNT ON;

    SELECT * 
    FROM ThirdPartyData 
    WHERE ASIN = '@value_get_from_string' 
      AND Type = '@value_get_from_string'
END
汤姆菲利普斯

使用拆分函数:

CREATE FUNCTION [dbo].[split](
        @delimited NVARCHAR(MAX),
        @delimiter NVARCHAR(100)
      ) RETURNS @t TABLE (id INT IDENTITY(1,1), val NVARCHAR(MAX))
      AS
      BEGIN
        DECLARE @xml XML
        SET @xml = N'<t>' + REPLACE(@delimited,@delimiter,'</t><t>') + '</t>'

        INSERT INTO @t(val)
        SELECT  r.value('.','nvarchar(MAX)') as item
        FROM  @xml.nodes('/t') as records(r)
        RETURN
      END
GO

DECLARE @DataString VARCHAR(MAX);

SET @DataString ='Type-1:ASIN-NsQf8,ASIN-YhQfu,ASIN-dpQf9,ASIN-rsWf3'


;WITH cte as (
SELECT a.id as [1], b.id as [2], c.id as [3], c.val
FROM (
   SELECT * FROM dbo.split(@DataString, ':')
) a
CROSS APPLY dbo.split(a.val,',') b
CROSS APPLY dbo.split(b.val,'-') c
),
typecte as (
   select b.val as [TypeValue]
   from cte a
      inner join cte b
      ON a.[1] = b.[1] 
      AND a.[2] = b.[2]
      AND a.[3]+1 = b.[3] -- Next value
   WHERE a.val='Type'
),
asincte as (
   select b.val as [ASINValue]
   from cte a
      inner join cte b
      ON a.[1] = b.[1] 
      AND a.[2] = b.[2]
      AND a.[3]+1 = b.[3] -- Next value
   WHERE a.val='ASIN'
)
SELECT *
FROM ThirdPartyData
WHERE [ASIN] IN (SELECT [ASINValue] FROM asincte)
AND [Type] IN (SELECT [TypeValue] FROM typecte)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

创建一个函数,它接受一个浮点数作为输入并返回一个包含数字的字符串

来自分类Dev

如何编写一个接受字符串并打印出该字符串的每个字母的 JavaScript 函数?

来自分类Dev

迅捷:方法不知道它接受一个字符串

来自分类Dev

编写一个接受整数数组的函数,以及一个将为“偶数”或“奇数”的字符串

来自分类Dev

编写一个接受 1 个参数的函数:一个字符串,s。它必须返回一个整数,表示 s? 中最长的神奇子序列的长度?

来自分类Dev

编写一个名为find_mismatch的函数,该函数接受两个字符串作为输入参数

来自分类Dev

编辑一个字符串以将其传递给存储过程

来自分类Dev

如何创建一个可以根据输入参数任意多次拆分字符串的函数?

来自分类Dev

我想接受一个字符串输入来继续一个条件分支

来自分类Dev

字符串拆分的第一个条目

来自分类Dev

获取拆分字符串的最后一个元素

来自分类Dev

将字符串拆分为一个值

来自分类Dev

拆分空字符串给出一个元素

来自分类Dev

我试图定义一个字符串 X="either 'this|that'" 但 GNU make 不会接受它

来自分类Dev

如何将一个输入字段的每个单词存储在新字符串中

来自分类Dev

如何编写一个接受字符串和对象并将其插值到字符串中的函数?

来自分类Dev

编写一个接受字符串数组并返回双精度值的函数,产生这些字符串的平均长度

来自分类Dev

一个字节的char数组似乎存储8个输入字符串字符

来自分类Dev

编写一个函数接受一个两个单词的字符串,如果两个单词在 python 中以相同的字母开头,则返回 True

来自分类Dev

如何创建一个接受字符和字符串并返回该字符在字符串中的索引的函数

来自分类Dev

编写一个程序,打印该字符串包含子字符串的次数

来自分类Dev

想要一个逗号分隔字符串的存储过程,它是表中的一列(有 20000 行)

来自分类Dev

神经网络可以接受一个对象(即不是数字也不是字符串)作为输入吗?

来自分类Dev

Ruby方法,它接受一个字符串并返回一个重复的数组,每个重复中的字符串中的下一个字母大写(如wave)

来自分类Dev

解析一个HTML输入的字符串

来自分类Dev

在C#中为SQL创建一个字符串,该字符串包含存储过程中的函数

来自分类Dev

T-SQL:我需要一个存储过程来使动态字符串工作吗?

来自分类Dev

输入不是有效的 Base-64 字符串,因为它包含一个非 Base-64 字符,超过两个填充字符

来自分类Dev

创建一个接受字符串并根据字符串是否包含重复字符返回true或false的函数

Related 相关文章

  1. 1

    创建一个函数,它接受一个浮点数作为输入并返回一个包含数字的字符串

  2. 2

    如何编写一个接受字符串并打印出该字符串的每个字母的 JavaScript 函数?

  3. 3

    迅捷:方法不知道它接受一个字符串

  4. 4

    编写一个接受整数数组的函数,以及一个将为“偶数”或“奇数”的字符串

  5. 5

    编写一个接受 1 个参数的函数:一个字符串,s。它必须返回一个整数,表示 s? 中最长的神奇子序列的长度?

  6. 6

    编写一个名为find_mismatch的函数,该函数接受两个字符串作为输入参数

  7. 7

    编辑一个字符串以将其传递给存储过程

  8. 8

    如何创建一个可以根据输入参数任意多次拆分字符串的函数?

  9. 9

    我想接受一个字符串输入来继续一个条件分支

  10. 10

    字符串拆分的第一个条目

  11. 11

    获取拆分字符串的最后一个元素

  12. 12

    将字符串拆分为一个值

  13. 13

    拆分空字符串给出一个元素

  14. 14

    我试图定义一个字符串 X="either 'this|that'" 但 GNU make 不会接受它

  15. 15

    如何将一个输入字段的每个单词存储在新字符串中

  16. 16

    如何编写一个接受字符串和对象并将其插值到字符串中的函数?

  17. 17

    编写一个接受字符串数组并返回双精度值的函数,产生这些字符串的平均长度

  18. 18

    一个字节的char数组似乎存储8个输入字符串字符

  19. 19

    编写一个函数接受一个两个单词的字符串,如果两个单词在 python 中以相同的字母开头,则返回 True

  20. 20

    如何创建一个接受字符和字符串并返回该字符在字符串中的索引的函数

  21. 21

    编写一个程序,打印该字符串包含子字符串的次数

  22. 22

    想要一个逗号分隔字符串的存储过程,它是表中的一列(有 20000 行)

  23. 23

    神经网络可以接受一个对象(即不是数字也不是字符串)作为输入吗?

  24. 24

    Ruby方法,它接受一个字符串并返回一个重复的数组,每个重复中的字符串中的下一个字母大写(如wave)

  25. 25

    解析一个HTML输入的字符串

  26. 26

    在C#中为SQL创建一个字符串,该字符串包含存储过程中的函数

  27. 27

    T-SQL:我需要一个存储过程来使动态字符串工作吗?

  28. 28

    输入不是有效的 Base-64 字符串,因为它包含一个非 Base-64 字符,超过两个填充字符

  29. 29

    创建一个接受字符串并根据字符串是否包含重复字符返回true或false的函数

热门标签

归档