如何在 SQL 中提取特定的多个文本?

Posted

技术标签:

【中文标题】如何在 SQL 中提取特定的多个文本?【英文标题】:How to extract specific multiple text in SQL? 【发布时间】:2017-03-09 14:45:46 【问题描述】:

我正在尝试从似乎连接了多个数据点的 1 列中提取特定文本。以下是出现在 1 行中的部分输出示例:

["q":"as":["id":"1","tags":["tagid":"62","tagstr":"示例1","tagid":"3","tagstr":"Example1","tagid":"65","tagstr":"Example1","tagid":"71","tagstr":"Example1"],"text":"Example1"],"hidden" :"false","id":"1","questionalias":"1","text":"Example1","ttl":"Example1" ,

粗体字是我要提取的内容。在实践中,每个“Example1”都是从单词选项中选择的。因此,我确切地知道我在寻找什么文本。我正在努力为输出创建一种方法来去除不需要的文本并返回关键词(大约 8 个)

或者,如果有人在 VBA 中做过类似的事情,这也是一种选择。

以前有人遇到过这种情况吗?

【问题讨论】:

你的预期输出是什么? 以下内容:Example1 Example1 Example1 Example。我可以使用“文本到列”来分隔单词。 这是 JSON——最好使用 JSON 解析器。 使用 VBA 的一个想法是 2 个步骤: 1. 获取 n - 数据中出现的关键字数量 = (LEN(data) - LEN(REPLACE(data, keyword, "") ) / LEN (关键词)。 2. 循环连接你的关键字 n 次 感谢您到目前为止的回复。鉴于这是 JSON 并被导入到 excel 中,是否有等效的“JSON 解析器”? 【参考方案1】:

您可以使用正则表达式解析数据!太棒了!

有很多(LeftMidRightInstr)函数可以解析您的数据,对吧?

有些人在遇到问题时会想 “我知道,我会使用正则表达式。” 现在他们有两个问题。

我认为,您尝试绑定一些关键字(tagstr、text 和 ttl),所以请查看 this。

随意修改这个表达式,看看this和that!

在 VBA 中没有从头开始的正则表达式,因此将 VBA 引用添加到“Microsoft VBScript 正则表达式 5.5”

这是我的示例您的数据:

Sub test()
    Dim Data As String
    Dim Re As RegExp
    Dim ReMatch As MatchCollection
    Dim CurrentMatch As Match


    Data = "[" & Chr(34) & "q" & Chr(34) & ":" & Chr(34) & "as" & Chr(34) & ":[" & Chr(34) & "id" & Chr(34) & ":" & Chr(34) & "1" & Chr(34) & "," & Chr(34) & "tags" & Chr(34) & _
            ":[" & Chr(34) & "tagid" & Chr(34) & ":" & Chr(34) & "62" & Chr(34) & "," & Chr(34) & "tagstr" & Chr(34) & ":" & Chr(34) & "Example1" & Chr(34) & "," & Chr(34) & "tagid" & Chr(34) & ":" & Chr(34) & "3" & Chr(34) & _
            "," & Chr(34) & "tagstr" & Chr(34) & ":" & Chr(34) & "Example1" & Chr(34) & "," & Chr(34) & "tagid" & Chr(34) & ":" & Chr(34) & "65" & Chr(34) & "," & Chr(34) & "tagstr" & Chr(34) & ":" & Chr(34) & "Example1" & Chr(34) & _
            "," & Chr(34) & "tagid" & Chr(34) & ":" & Chr(34) & "71" & Chr(34) & "," & Chr(34) & "tagstr" & Chr(34) & ":" & Chr(34) & "Example1" & Chr(34) & "]," & Chr(34) & "text" & Chr(34) & ":" & Chr(34) & "Example1" & Chr(34) & _
            "]," & Chr(34) & "hidden" & Chr(34) & ":" & Chr(34) & "false" & Chr(34) & "," & Chr(34) & "id" & Chr(34) & ":" & Chr(34) & "1" & Chr(34) & "," & Chr(34) & "questionalias" & Chr(34) & ":" & Chr(34) & "1" & Chr(34) & _
            "," & Chr(34) & "text" & Chr(34) & ":" & Chr(34) & "Example1" & Chr(34) & "," & Chr(34) & "ttl" & Chr(34) & ":" & Chr(34) & "Example1" & Chr(34) & ","

    Debug.Print "My data is:" & vbNewLine & Data

    Set Re = New RegExp
    Re.IgnoreCase = True
    Re.Global = True
    Re.MultiLine = True
    Re.Pattern = "(?=" & Chr(34) & "tagstr" & Chr(34) & "|" & Chr(34) & _
            "text" & Chr(34) & "|" & Chr(34) & "ttl" & Chr(34) & ")(?:" & Chr(34) & _
            "\w*" & Chr(34) & ":" & Chr(34) & "(.*?)" & Chr(34) & ")"

    Debug.Print "My pattern is:" & vbNewLine & Re.Pattern

    Set ReMatch = Re.Execute(Data)

    Debug.Print "Matched " & ReMatch.Count & " times!"

    For Each CurrentMatch In ReMatch
        Debug.Print "Capture " & CurrentMatch.SubMatches(0) & " in " & CurrentMatch.Value
    Next

End Sub

输出:

没那么复杂吧? 毕竟你可以用标准的字符串函数来做到这一点..

【讨论】:

感谢感谢。很快就会通过它! @Anthony,祝你好运!我的回答部分是个玩笑,因为正则表达式不是那么容易理解,你会花一些时间学习它们。随意在regex101 之类的网站上使用您的数据,看看您从这个和那个模式中得到了什么。如果你卡住了 - SO上有整个regex标签。只需提供您的问题、数据、所需的输出以及到目前为止您尝试过的内容,例如模式和使用的语言(在您的情况下为 vbscript)。 @Anthony S,无论如何我很好奇解决方案是否适合您 不幸的是它没有工作。我将更详细地阅读以上内容。

以上是关于如何在 SQL 中提取特定的多个文本?的主要内容,如果未能解决你的问题,请参考以下文章

DB2 和 SQL-如何在特定字段中返回最大值,以便每行只显示一条记录;从多个表中提取数据

如何在 SQL Server 中提取此特定子字符串?

如何对mySQL数据库中某些特定字段进行排序?

如何在 Swift 中使用 UITextField 从图像中提取特定文本?

如何解析 HAR 文件以提取文本内容?

如何从特定的二进制文件格式中提取文本?