【问题标题】:Splitting string based off a word根据单词拆分字符串
【发布时间】:2020-01-07 18:08:12
【问题描述】:

我有一些 JSON 数据作为 TEXT 存储在表列中。下面是一列中包含的部分 sn-p。

我想要做的是获取当前作为 col1 的文本和之前作为 col2 的文本。不知道该怎么做。任何帮助将不胜感激

  "field_text": { 
    "current": "This is current text",
    "previous": "This is previous text"
  },
  "CustomerIDs": { 
    "current": "1234",
    "previous": ""
  }
}.

【问题讨论】:

  • 我只是迷失了你的桌子的样子。 hte 列的名称是什么?我在您的示例中看到了多个不同的名称。你用的是什么数据库?
  • 这是 VARCHAR 文本的摘录,存储在列中。我想做的是从“field_text”中提取“Current”值和“Previous”值。列的名称是 text_json。我正在使用 SQL 数据库
  • 如果是 SQl Server 2016 及更高版本,这应该会有所帮助stackoverflow.com/questions/38285223/…
  • 使用 SQL Server 2012 :(
  • @ArslanAhmed 如果还不算太晚,请在下面查看我的答案

标签: sql string split sql-server-2012 keyword


【解决方案1】:

由于我们没有可用于较新版本的 SQL Server 的 JSON 解析器,因此如果您的 JSON 字符串的结构是静态的,那么这里有一个丑陋的方法可能会解决问题。为简单起见,我假设除了要提取的特定字符串之外没有空格。因此,您可能需要调整此代码中的几个数字 (11,12,13)​​ 来解决这个问题。如果你通过它,你会发现它基本上是一种分而治之的方法来获得我们想要的字符串。

with your_table as

(select '{"field_text":{"current":"This is current text","previous":"This is previous text"},"CustomerIDs":{"current":"1234","previous":""}}' as json_text)

select json_text, txt1, txt2
from your_table t1
cross apply (select charindex('"current":"',json_text) as i1) t2
cross apply (select charindex('"previous":"',json_text,(i1 + 1)) as i2) t3
cross apply (select substring(json_text,(i1+11),(i2-i1-13)) as txt1) t4
cross apply (select charindex('"previous":"',json_text) as i3) t5
cross apply (select charindex('"},',json_text,(i3 + 1)) as i4) t6
cross apply (select substring(json_text,(i3+12),(i4-i3-12)) as txt2) t7;

DEMO ON SQL SERVER 2012

【讨论】:

    猜你喜欢
    • 2021-05-26
    • 2018-06-07
    • 1970-01-01
    • 2011-01-16
    • 1970-01-01
    • 1970-01-01
    • 2020-07-18
    • 1970-01-01
    • 2018-05-12
    相关资源
    最近更新 更多