小编Car*_*Ben的帖子

在 SQL Server 中解析 JSON 列

我有一个 JSON 字符串存储在 SQL Server 表列中。该列名为 MSSG_RECIPS,包含一个长文本字符串,例如:

`{"type":"email","recipient":"\"Artzer, Daniel J\" <DJArtzer@emailaddr.com>","sentTS":"2017-11-08T20:58:14.600Z"},{"type":"email","recipient":"\"Friedman, Brian\" <BFriedman@emailaddr.com>","sentTS":"2017-11-08T20:58:14.600Z"},{"type":"email","recipient":"\"Higgins, Laura L\" <LLHiggins@emailaddr.com>","sentTS":"2017-11-08T20:58:14.600Z"},{"type":"email","recipient":"\"Landenberger, Dan R\" <DRLandenberger@emailaddr.com>","sentTS":"2017-11-08T20:58:14.600Z"},{"type":"email","recipient":"\"Leitl, Scott\" <SLeitl@emailaddr.com>","sentTS":"2017-11-08T20:58:14.600Z"},{"type":"email","recipient":"\"Mendoza, Mario\" <MMendoza@emailaddr.com>","sentTS":"2017-11-08T20:58:14.600Z"}`
Run Code Online (Sandbox Code Playgroud)

此示例字符串说明了我的 JSON 的格式,每个元素均以逗号分隔。

我可以用两种方式解析。一,使用 JSON_VALUE,我可以将属性作为单独的列进行检索:

select
 JSON_VALUE(mssg_recips, '$.type'),
 JSON_VALUE(mssg_recips, '$.recipient'),
 JSON_VALUE(mssg_recips, '$.sentTS'),
 DOC_ID
from MY_JSON_TAB
Run Code Online (Sandbox Code Playgroud)

但是,这仅返回 JSON 的第一个元素。

我尝试的另一种方法是:

select doc_id, value as EMAIL_RECIP
from MY_JSON_TAB
Cross Apply OPENJSON(MSSG_RECIPS)
Run Code Online (Sandbox Code Playgroud)

这将记录返回为行而不是列,但同样,只有第一个元素。

可以说,我如何向下遍历以检索第二个、第三个等等元素?

sql-server json

13
推荐指数
1
解决办法
3万
查看次数

如何使用SQL Server解析嵌套的JSON数组

我目前能够使用SQL Server的"OPENJSON WITH(..."语法解析大部分JSON文件.但是,这个特定的文件包含我不知道如何处理的嵌套数组.

我读过的许多例子都将JSON引用为变量.在这种情况下,我正在调用一个文件:

select DEV_JSON.*
from OPENROWSET
(BULK 'C:\Users\Myuser\Documents\JSON_extract.json', SINGLE_CLOB) as my_datafile
 CROSS APPLY OPENJSON(BulkColumn) 
WITH
  (DOC_ID           varchar(100)  '$.doc._id',
   DOC_REV          varchar(45)   '$.doc._rev',
   DELY_APPL_NAME   varchar(20)   '$.doc.delivery.application',
   DELY_SENT_BY     varchar(25)   '$.doc.delivery.sender.id',
   DELY_SENT_TYPO   varchar(20)   '$.doc.delivery.sender.type',
   .....
   ....
   ...
   ..) as DEV_JSON
Run Code Online (Sandbox Code Playgroud)

其中一个属性包含嵌套数组.下面我复制了我的JSON的前5个属性,以及嵌套的"recipients"数组.

如何构建我的SQL来解析这一部分?

"doc": {
    "_id": "049d4e4030afcdeefedaa90f640f91d4a2be93d7-bd_abcxyz@somemail.com",
    "_rev": "3-e119db13dae8d50ae0c4579ba9c87fc9",
    "delivery": {
        "application": "App_XYZ",
        "sender": {
            "id": "MABarrera@yahoo.com",
            "type": "user"
        },
        "recipients": [{
                "type": "email",
                "recipient": "\"Artzer, Daniel J\" <DJArtzer@emailaddr.com>",
                "sentTS": "2017-10-18T13:04:00.133Z"
            },
            {
                "type": "email",
                "recipient": "\"Higgins, Laura L\" <LLHiggins@emailaddr.com>",
                "sentTS": "2017-10-18T13:04:00.133Z"
            }, …
Run Code Online (Sandbox Code Playgroud)

sql-server arrays json

8
推荐指数
2
解决办法
1万
查看次数

SQL Server JSON_VALUE 语法

我创建了一个包含 25 列的 SQL Server 表。我的一列实际上是 JSON 文本,存储为 nvarchar(max)。

现在我需要能够查询这个 JSON 列并解析出各种属性。我曾尝试将 JSON_VALUE 应用于我的专栏,但我做错了;我的查询运行但为所有值返回 NULL。

JSON 本身看起来像:

[
 {
  "lineName":"GHjr",
  "pipeDiameter":"12",
  "pipeLength":"52000",
  "pressure":"15",
  "volume":"107"
 },
 {
  "lineName":"Ks3R",
  "pipeDiameter":"9",
  "pipeLength":"40000",
  "pressure":"15",
  "volume":"80"
 }
]
Run Code Online (Sandbox Code Playgroud)

我使用的 SQL 是:

select
 DOC_ID, LINE_SPECS,
 JSON_VALUE(LINE_SPECS, '$.lineName')     as line_name,
 JSON_VALUE(LINE_SPECS, '$.pipe_Diameter') as diameter
from dbo.MY_TEST_DOCS
where ISJSON(LINE_SPECS) > 0
  and len(LINE_SPECS) > 3
Run Code Online (Sandbox Code Playgroud)

但是,我的 2 个“已解析”列返回所有 NULL。如何解析此列中的五个属性?

sql-server json

5
推荐指数
1
解决办法
7367
查看次数

如何返回 DBTIMEZONE 名称

我跑了

select dbtimezone, sessiontimezone
from dual
Run Code Online (Sandbox Code Playgroud)

分别返回 -04:00 和 -06:00。

我也跑了

select
  TZ_OFFSET('US/Eastern') "EST_offset",
  TZ_OFFSET('America/Denver') "Mtn Time offset"
from dual
Run Code Online (Sandbox Code Playgroud)

返回相同的数字。

我的问题是,如何将“-04:00”转换为“美国/东部”之类的内容?是否有我忽略的简单内置函数,或者我是否需要编写自己的 CASE 语句来创建这种关系?

谢谢!

sql oracle

2
推荐指数
1
解决办法
5772
查看次数

在Fauxton学习mapreduce

我是noSQL,couchDB和mapreduce的新手,需要一些帮助。

我在这里讨论了相同的问题{ 如何在Fauxton中使用reduce },但不理解答案:(。

我有一个工作图功能:

function (foo) {
   if(foo.type == "blog post");
  emit(foo)
}
Run Code Online (Sandbox Code Playgroud)

它返回11个单独的文档。我想修改它以返回foo.type以及1。我尝试过:

function (doc) {
   if(doc.type == "blog post");
  return count(doc)
}
Run Code Online (Sandbox Code Playgroud)

和“减少”面板中的“ _count”,但由于View不返回任何内容,因此显然做错了什么。

在此先感谢您的协助或指导!

couchdb fauxton

0
推荐指数
1
解决办法
379
查看次数

标签 统计

json ×3

sql-server ×3

arrays ×1

couchdb ×1

fauxton ×1

oracle ×1

sql ×1