IBM Db2 11.5中JSON数组对象查询未返回预期结果的问题
解决IBM Db2 11.5中JSON数组查询的问题
一、修复JSON_EXISTS查询无结果的问题
核心问题是Db2的SQL/JSON路径表达式使用=而非==作为比较运算符,这和部分在线JSON Path工具的语法不同;同时显式指定LAX模式,可避免因JSON结构细节导致的匹配失效。
修正后的查询语句:
SELECT * FROM test_entity WHERE JSON_EXISTS( data, 'lax $.outerField[?(@.innerField = "target")]' );
如果data列存储的是字符串类型(如VARCHAR/CLOB)而非原生JSON类型,需增加FORMAT JSON参数明确告知Db2解析格式:
SELECT * FROM test_entity WHERE JSON_EXISTS( data FORMAT JSON, 'lax $.outerField[?(@.innerField = "target")]' );
二、修复JSON_TABLE的语法错误
你的JSON_TABLE查询存在两个问题:缺少PATH关键字标识JSON路径、列定义名称与WHERE子句引用名称不一致。
修正后的查询语句:
SELECT te.* FROM TEST_ENTITY te, JSON_TABLE( te.data, PATH 'lax $.outerField[*]' COLUMNS ( innerField VARCHAR(100) PATH 'lax $.innerField' ) ERROR ON ERROR ) AS jt WHERE jt.innerField = 'target';
补充说明:
LAX模式:允许路径匹配时忽略不存在的字段或结构,避免因JSON微小差异导致查询失败;若需严格匹配结构,可替换为STRICT模式ERROR ON ERROR:解析JSON出错时抛出异常,可根据需求改为NULL ON ERROR让错误字段返回NULL
内容的提问来源于stack exchange,提问作者Canediguerra
相关产品推荐
相关产品推荐

