问题描述
这是我的查询
从表名中选择object_construct('id',id,alpha,PARSE_JSON(null)) 限制1
输出为{“ id”:1,“ alpha”:null}
但是当我将 parse_json 与 ifnull 结合使用时,它会返回空对象 {} 不能正常工作
选择object_construct('id',IFNULL(id,(PARSE_JSON(null)),alpha, 表名限制1中的IFNULL(alpha,(PARSE_JSON(null)))
以上返回{}
但是我需要使用null值{“ id”:1,“ alpha”:null}
合并无法解决任何问题?
[问题已更新]
感谢Felipe Hoffa。
在您的答案中,最后一部分按预期方式工作。
SELECT OBJECT_CONSTRUCT('id',id,'alpha',IFNULL(alpha,PARSE_JSON('null')))
FROM (SELECT 1 id,null alpha)
# {"alpha": null,"id": 1}
但是当我尝试以下操作时,它不起作用
SELECT OBJECT_CONSTRUCT(
'id',PARSE_JSON('null'))
)
FROM (SELECT id,alpha from tableName)
#{ "id" :1 }
在使用FROM查询时有效: FROM(SELECT 1 id,空alpha)
在使用我的FROM查询时不起作用: FROM(SELECT ID,来自tableName的字母)
希望已清除。
预先感谢
解决方法
这里的问题是问题的第一条陈述不正确。编码PARSE_JSON(null)
时,null
不表示:
SELECT OBJECT_CONSTRUCT('id',id,alpha,PARSE_JSON(null))
FROM (SELECT 1 id,null alpha)
# {"id": 1}
要解决此问题,您必须改为PARSE_JSON('null')
-并引用变量名称:
SELECT OBJECT_CONSTRUCT('id','alpha',PARSE_JSON('null'))
FROM (SELECT 1 id,null alpha)
# {"alpha": null,"id": 1}
那看起来更好。解决此问题后,现在IF_NULL
可以按需工作了:
SELECT OBJECT_CONSTRUCT('id',IFNULL(alpha,PARSE_JSON('null')))
FROM (SELECT 1 id,"id": 1}
,
我需要有空值 { "id" : 1,"alpha" : null }
您可以使用 OBJECT_CONSTRUCT_KEEP_NULL 而不是 OBJECT_CONSTRUCT。
SELECT OBJECT_CONSTRUCT_KEEP_NULL('id',alpha) from tableName;
SELECT OBJECT_CONSTRUCT_KEEP_NULL(*) from (SELECT id,alpha from tableName) sub;