【发布时间】:2015-07-29 19:05:03
【问题描述】:
我正在查看 SQL Server 表中的大约 13,000 行,并尝试解析出存储为 json 的列中的某些值。
json 列值如下所示:
..."http://www.companyurl.com","FoundedYear":"2007","Status":"Private","CompanySize":"51-200","TagLine":"We build software we believe in","Origi...
我想提取“CompanySize”的值,但并非所有行都包含此属性。其他复杂因素:
- 我不确定“CompanySize”参数中有多少个可能的值。
- “CompanySize”后面并不总是跟“TagLine”参数。
我肯定知道的一条规则:CompanySize 值始终是一个长度未知的字符串,它跟在 varchar 字符串 "CompanySize":" 之后,并在下一个 "," 字符串之前终止。
理想情况下,我们会完全升级到 SQL Server 2016,这样我就可以利用 SQL Server's JSON support,但事实并非如此。
【问题讨论】:
-
由于不可能对此类数据进行索引,也没有任何方法可以在不完全扫描您的表的情况下返回结果,除非相关字符串非常大,您想避免这样做 - 我' d 只返回整个字符串并在适当的环境中处理它。
-
@Amit 所说的,甚至更好:实际为这些数据创建一个表或模式,并首先将其正确存储。
-
@Amit 你为什么假设这个值被过滤了?无论如何,索引可能不相关。获得这个值也相当容易,13k 行几乎不是任何数据。
-
@JoelCoehoorn 你在这里做了一些可能不公平的假设。可能是他们已经在应用层处理了这些数据,但是现在有一个特殊的原因需要数据库中的一个最初没有考虑过的值,并且不需要将数据存储两次。我曾在一个系统上工作过,其中数据以 JSON 形式输入,因为开发人员喜欢它,并且不用担心以后需要在数据库中解析它。在这种情况下,XML 更有意义,因为它可以在两个地方进行解析。
标签: sql-server json string tsql