SQL在字符串中查找文本

时间:2014-11-30 15:57:33

标签: html sql replace charindex

我的数据库中有一个文本字段:

DECLARE @vchText varchar(max) = 
 This is a string<>Test1<>Test2<>Test

@vchText参数应该像这样返回:

  This is a string: 

     1. Test1    
     2. Test2 
     3. Test

任何人都想到一个纠正这个问题的好方法。我正在考虑使用WHILE LOOP的STUFF和CHARINDEX函数......?

我应该注意的是,列表中可能不会只有1,2,3项可能会有更多,所以我无法构建它所以它的静态只能处理1,2,3它应该能够用于列表中的任意数量的项目。

2 个答案:

答案 0 :(得分:0)

试试这个。将字符串分成几部分。

  1. 第一部分 - This is a list:

  2. 第二部分 - 1.Test1 1.Test2 1.Test3

  3. 使用分隔符Space第二部分转换为行。然后将row_number添加到行中。附加row_number和列数据。

    最后将不同的行转换为space分隔的单行,并将其附加到first part

    DECLARE @NOTE   VARCHAR(max) = 'This is a list: 1.Test1 1.Test2 1.Test3',
            @temp   VARCHAR(max),
            @output VARCHAR(max)
    
    SELECT @temp = Substring(@NOTE, Charindex(':', @NOTE) + 2, Len(@note))
    
    SELECT @output = LEFT(@NOTE, Charindex(':', @NOTE) + 1)
    
    SELECT @output += CONVERT(VARCHAR(10), Row_number() OVER (ORDER BY col))
                      + Substring(col, Charindex('.', col), Len(col))
                      + ' '
    FROM   (SELECT Split.a.value('.', 'VARCHAR(100)') col
            FROM   (SELECT Cast ('<M>' + Replace(@temp, ' ', '</M><M>') + '</M>' AS XML) AS Data) AS A
                   CROSS APPLY Data.nodes ('/M') AS Split(a)) ou
    
    SELECT @output -- This is a list: 1.Test1 2.Test2 3.Test3 
    

答案 1 :(得分:0)

我能够通过循环完成它并使用下面的东西和charindex。

    DECLARE @vchText varchar(max) = 
 This is a string<>Test1<>Test2<>Test


DECLARE @positionofNextX INT = CHARINDEX('<>', @vchText)
DECLARE @nbrOFListItems INT = 1

WHILE @positionofNextX  != 0
BEGIN
    SET @NOTE = STUFF( @vchText, @positionofNextX, 4, CAST(@nbrOFListItems AS VARCHAR(1)) + '. ')

    SET @positionofNextX  = CHARINDEX('<>',  @vchText)

    --increment the list item number
    SET @nbrOFListItems = @nbrOFListItems + 1
END

print  @vchText