一个专有的第三方应用程序将 JSON 字符串存储在它的数据库中,如下所示:
{"state":"complete","timestamp":1614776473000}
我需要时间戳,发现
DB2 提供 JSON 函数。由于它在PROF_VALUE
列中存储为字符串,我想SYSTOOLS.JSON2BSON
在我可以JSON_VAL
用来获取时间戳之前需要转换:
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
像这样删除调用时,也会出现同样的错误
SELECT SYSTOOLS.JSON_VAL(PROF_VALUE, "timestamp", "f")
也不能处理相同的错误(不同的数据类型):
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
尝试使用原始输入数据进行测试(而不是数据库数据),但它似乎不适合这样做。
SELECT *
FROM TABLE(SYSTOOLS.JSON_TABLE( SYSTOOLS.JSON2BSON('{"state":"complete","timestamp":1614776473000}'), 'state','s:32')) DATA
这给了我一个单行表:类型 = 2 和值 = 完整。