检索以某些char开头的所有字符串实例?

时间:2015-08-13 15:49:01

标签: tsql

我有varchar(max)类型的列[帖子]。[post_text],此列中的文字可能有几个以开头的单词实例。因此,例如,示例字符串将是:

#hoops #blog #sports The score is now 25-40. #NBA Please check our site for more
updates #Basket #Olympics #2016
Thanks for your support #FIBA #dunk #blog 
#NBA Basketball Blog #NBA

我想检索以开头的所有单词实例,并删除所有重复的值。一旦我获得了字符串中的所有值,我就可以轻松地对重复进行分组和删除,但我不知道如何列出实例。

感谢。

2 个答案:

答案 0 :(得分:1)

此操作应以更适合复杂字符串操作的语言进行。这是VB.Net的一个片段,只是为了让你入门。其余的应该相当容易(从表(或平面文件)中读取行,调用解析函数(参见下面的代码),然后将数据行写入目标表。

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim sData As String
    Dim sArray(10) As String
    Dim sArray2(10) As String
    Dim iLoopCtr As Integer

    sData = "#hoops #blog #sports The score is now 25-40. #NBA Please check our site for more"

    sArray = Split(sData, "#")

    For iLoopCtr = 1 To 4
        If InStr(sArray(iLoopCtr), " ") Then
            sArray2 = Split(sArray(iLoopCtr), " ")
            sArray(iLoopCtr) = sArray2(0)
        End If
    Next

    MsgBox(sArray(1))
    MsgBox(sArray(2))
    MsgBox(sArray(3))
    MsgBox(sArray(4))

End Sub

答案 1 :(得分:0)

我最终使用tsql进行解析。考虑到这更像是有好处而不是要求,我不想在SSIS项目之外维护代码。

这或多或少是我正在使用的内容,并将其与cursor结合使用。我不认为,在这种情况下,我可以替代cursor

declare @returnList TABLE ([Name] [nvarchar] (500))
--add space at the end, or tsql breaks  
declare @stringToSplit VARCHAR(MAX) = '#hoops #blog #sports The score is now 25-40. #NBA Please check our site for more updates #Basket #Olympics #2016 Thanks for your support #FIBA #dunk #blog  #NBA Basketball Blog #NBA '
DECLARE @posChar INT
DECLARE @posSpace INT
declare @Tag varchar(100)

WHILE CHARINDEX('#', @stringToSplit) > 0
BEGIN
    SELECT @posChar = CHARINDEX('#', @stringToSplit) 
    select @posSpace = CHARINDEX(' ', @stringToSplit, @posChar) 
    --select @posChar, @posSpace
    select @Tag = substring(@stringToSplit, @posChar, @posSpace-@posChar)
    insert into @returnList select @tag
    select @stringToSplit = substring(@stringToSplit, @posSpace, LEN(@stringToSplit))
    --select @stringToSplit 
END
select *from @returnList