Postgresql
如何選擇不為空的數組?
為什麼這如此棘手,令牌設置為它不等於 null 也不等於空字元串?
SELECT lexemes FROM ts_debug('This is a title') WHERE alias = 'asciiword'; lexemes --------- {} {} {} {titl} (4 rows)
好的..所以我想擺脫
{}
,SELECT lexemes FROM ts_debug('This is a title') WHERE alias = 'asciiword' AND lexemes <> '{}' AND lexemes <> ARRAY[]::text[] AND lexemes IS NOT NULL AND lexemes <> ARRAY[' '] AND lexemes <> ARRAY[null]::text[];
我知道其中大部分都行不通。,但我很困惑為什麼
<> '{}'
不工作<> ARRAY[]::text;
。我如何過濾掉這個?
原因似乎是該列中的空字元串具有數組維度
[1:0]
。通常應該是NULL
. 看:SELECT lexemes, array_dims(lexemes) FROM ts_debug('a title'); lexemes | array_dims ---------+------------ {} | [1:0] -- !! | {titl} | [1:1]
空數組通常具有 NULL 作為數組維度。
SELECT '{}'::text[] AS test, array_dims('{}'::text[]); test | array_dims ---------+------------ {} | <NULL>
因此,比較
lexemes = '{}'::text[]
返回FALSE
。對我來說似乎是一個錯誤。我測試了 8.4 - 10 Beta 版本。它在所有版本中。作為一種解決方法,排除所有空數組,包括奇數情況(和 NULL):
SELECT * FROM ts_debug('This is a title') WHERE cardinality(lexemes) > 0;
或者比較文本表示:
... AND lexemes::text <> '{}';