我有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
我想检索以#开头的所有单词实例,并删除所有重复的值。一旦我获得了字符串中的所有值,我就可以轻松地对重复进行分组和删除,但我不知道如何列出实例。
感谢。
答案 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