5

integer_arrayフィールドで定義されたテーブルがあります。次のデータが含まれています。

 id | black_list 
----+------------
  4 |            
  5 |            
  8 |            
 12 |            
  6 |            
  7 |            
 10 | {5}        
 13 | {5}        
  3 | {}         
  9 | {3}        
 11 | {}         
 14 | {}         
  1 | {}         
  2 | {}         
 15 | {}         
 16 | {}         
 17 | {}         
(17 rows)

配列フィールドが空かどうか(NULLかどうか)を確認するためのクエリを作成する必要があります。問題は、{}値がnullでなく、ARRAY_LENGTH関数から長さを返さないことです。http://www.postgresql.org/docs/8.4/static/functions-array.htmlにリストされている他の配列関数はどれも私が必要としているものではないようです。ARRAY_LENGTH(0 || black_list)それらすべてに1以上の長さを返すように書くことができることがわかりましたが、それは厄介なハックのようです。これをテストする適切な方法は何ですか?

ボーナス質問:正確には何を{}代表していますか?その値を返すselectステートメントを書くことができませんでした。ARRAY[]エラーをスローし、をARRAY[""]返し{""}、をARRAY[NULL]返します{NULL}

4

1 に答える 1

6

{}空の配列を表しているようです。これは、値が何も返さないことNOT NULLと、ARRAY_LENGTH({})何も返さないことの両方を説明します。ただし、0を返すことを期待していますが{}、おそらくそれは私がよく知らないPostgreSQLの特性です。

ARRAY_LENGTHたとえば、の戻り値をテストできない理由はありますか?

SELECT id FROM table WHERE ARRAY_LENGTH(black_list, 1) IS NULL OR ARRAY_LENGTH(black_list, 1) < 1

ARRAY_LENGTH()上記の例のような空の値に気を失うことはないと仮定するとid=12、それでうまくいくようです。

于 2013-03-25T21:47:50.723 に答える