首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JSON_VAL从JSON字符串中获取属性会导致"<attribute>在使用的上下文中无效“错误

使用JSON_VAL从JSON字符串中获取属性会导致"<attribute>在使用的上下文中无效“错误
EN

Stack Overflow用户
提问于 2021-03-03 14:12:22
回答 1查看 202关注 0票数 0

私有第三方应用程序将JSON字符串存储在它的数据库中,如下所示:

代码语言:javascript
复制
{"state":"complete","timestamp":1614776473000}

我需要时间戳,然后发现DB2提供JSON函数。由于它作为字符串存储在PROF_VALUE列中,所以在使用JSON_VAL获取时间戳之前,需要使用SYSTOOLS.JSON2BSON进行转换:

代码语言:javascript
复制
SELECT SYSTOOLS.JSON_VAL(SYSTOOLS.JSON2BSON(PROF_VALUE), "timestamp", "f")
FROM EMPINST.PROFILE_EXTENSIONS ext
WHERE PROF_PROPERTY_ID = 'touchpointState'

这会导致时间戳在使用的上下文中无效的错误( SQLCODE=-206,SQLSTATE=42703,DRIVER=4.26.14)。当我像这样删除JSON2BSON调用时,也会出现同样的错误

代码语言:javascript
复制
SELECT SYSTOOLS.JSON_VAL(PROF_VALUE, "timestamp", "f")

也不能处理相同的错误(不同的数据类型):

代码语言:javascript
复制
SELECT SYSTOOLS.JSON_VAL(SYSTOOLS.JSON2BSON(PROF_VALUE), "state", "s:1000")
SELECT SYSTOOLS.JSON_VAL(PROF_VALUE) "state", "s:1000")

我不明白这个错误。我的语法类似于文档化的JSON_VAL ( json-value , search-string , result-type),与示例中的相同,它们展示了如何获取对象的name字段。

我还使用了一些JSON_TABLE来使用原始输入数据进行测试(而不是数据库数据),但似乎不适合这样做。

代码语言:javascript
复制
SELECT *
FROM TABLE(SYSTOOLS.JSON_TABLE( SYSTOOLS.JSON2BSON('{"state":"complete","timestamp":1614776473000}'), 'state','s:32')) DATA

这给了我一个只有一行的表: Type =2和Value = complete。

EN

回答 1

Stack Overflow用户

发布于 2021-03-07 17:15:38

我的查询中有两个问题:首先,似乎双引号"是用于对象引用的。我不知道有什么不同,因为在我所使用的大多数数据库中,单'和双引号"都是相等的。

第二个问题是,JSON_VAL需要在没有SYSTOOLS的情况下被调用,但是在SYSTOOLS.JSON2BSON(PROF_VALUE)上仍然需要引用。

通过这些更改,以下查询工作正常:

代码语言:javascript
复制
SELECT JSON_VAL(SYSTOOLS.JSON2BSON(PROF_VALUE), 'timestamp', 'f')
FROM EMPINST.PROFILE_EXTENSIONS ext
WHERE PROF_PROPERTY_ID = 'touchpointState'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66458757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档