我正在尝试从JSONB
类型中选择具有true
值的键。到目前为止,我设法使用此查询,但我觉得有更好的方法:
SELECT json.key
FROM jsonb_each_text('{"aaa": true, "bbb": false}'::JSONB) json
WHERE json.value = 'true';
我不喜欢的是WHERE
子句,我正在比较strings
。有没有办法将它投射到boolean
?
如果是,它是否也适用于truthy
和falsy
值? (javascript中对truthy
和falsy
值的解释:http://www.codeproject.com/Articles/713894/Truthy-Vs-Falsy-Values-in-JavaScript)。
答案 0 :(得分:2)
jsonb
有一个等于运算符(=
;与json
不同),所以你可以写
SELECT key
FROM jsonb_each('{"aaa": true, "bbb": false}')
WHERE value = jsonb 'true'
(jsonb_each_text()
你依赖一些JSON值'文字表示。
如果需要,您甚至可以包含一些其他值:
WHERE value IN (to_jsonb(TRUE), jsonb '"true"', to_jsonb('truthy'))
IN
使用了底层的相等运算符。