【问题标题】:SQL get values within quotesSQL 获取引号内的值
【发布时间】:2020-05-08 11:47:58
【问题描述】:

我遇到了以下问题,我在 SQL 中有几个字符串,并尝试从中获取一小部分,但我无法让它工作。

我的字符串示例:

{"@odata.type":"#make.this.short","Id":0,"Value":"Stackoverflow"}

[{"@odata.type":"#Mmake.this.short","Id":1,"Value":"Stackoverflow1"},{"@odata.type":"#make.this.short","Id":2,"Value":"Stackoverflow2"}]

{"@odata.type":"#make.this.short","Claims":"i:0#.f|membership|name@email.nl","DisplayName":"Lastname F. (Firstname)","Email":"Name@email.nl","Picture":"https://picture.com/","Department":null,"JobTitle":null}

现在我正在尝试编写一个存储过程并取回以下值:

堆栈溢出

堆栈溢出1,堆栈溢出2

和姓名@email.nl

我尝试使用 SUBSTRING、LEN、RIGHT、CHARINDEX 和 REVERSE,但我似乎无法得到我需要的东西。 Value: 的值当然可以对每条记录有不同的长度。

我的想法是计算总字符串(len 字符串) 然后得到右边的第一个 " 并从总字符串中减去它。 然后我会尝试得到第二个“并从第一个中减去它。剩下的是里面的值,我可以使用一个子字符串。

但这仅适用于第一个,其他的则完全不同,不知何故,我什至无法成为第一个做我喜欢做的事。 (我似乎看不到右边的第二个“)

我希望这是足够的信息,所以你可以指出我正确的方向来解决这个问题。

谢谢你

【问题讨论】:

  • 我去掉了mysql标签,因为你引用的函数是SQL Server函数。

标签: sql sql-server sql-server-2017


【解决方案1】:

当您使用 SQL Server 2017 时,您应该为此使用 JSON 函数

SELECT JSON_VALUE('{"@odata.type":"#make.this.short","Id":0,"Value":"Stackoverflow"}','$.Value')

SELECT JSON_VALUE('{"@odata.type":"#make.this.short","Claims":"i:0#.f|membership|name@email.nl","DisplayName":"Lastname F. (Firstname)","Email":"Name@email.nl","Picture":"https://picture.com/","Department":null,"JobTitle":null}','$.Email')


SELECT STRING_AGG(JSON_VALUE(value,'$.Value') ,',')
FROM OPENJSON('[{"@odata.type":"#Mmake.this.short","Id":1,"Value":"Stackoverflow1"},{"@odata.type":"#make.this.short","Id":2,"Value":"Stackoverflow2"}]','$')

【讨论】:

  • 我正在使用 SQL Server 17,这确实很有魅力。我可以使用我从最后一个中获得的 2 个值再次从中创建一个字符串。我只是想知道你是否能告诉我更多关于为什么这行得通,因为我无法理解它。
  • 您的字符串是JSON 格式。 JSON_VALUE 是一个从 JSON 中提取标量值的函数,OPENJSON 获取一个表格结果集(在这种情况下是数组中的每个元素)。有关它们的更多信息,请参阅JSON data in SQL Server
  • 在 2017 年,您可以使用 STRING_AGG 获得您想要的最后一个结果
猜你喜欢
  • 2018-06-09
  • 1970-01-01
  • 2015-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-25
  • 1970-01-01
相关资源
最近更新 更多