PostgreSQL 9.4 を使用する場合:
SELECT x, lower(x), upper(x) FROM (SELECT '[1,2]'::numrange x) q;
> [1,2] | 1 | 2 -- looks OK
SELECT x, lower(x), upper(x) FROM (SELECT '[1,2]'::int4range x) q;
> [1,3) | 1 | >>3<< -- this is unexpected
さらに確認しましょう:
SELECT x, lower(x), upper(x) FROM (SELECT '[1,3)'::numrange x) q1;
> [1,3) | 1 | 3 -- looks OK
SELECT x, lower(x), upper(x) FROM (SELECT '[1,3]'::numrange x) q1;
> [1,3] | 1 | 3 -- looks OK
pgドキュメントから:
アッパー(任意の範囲) | 範囲の要素タイプ | 範囲の上限 | upper(numrange(1.1,2.2)) | 2.2
技術的に3
は整数範囲の上限ですが、すべての自然数も2以上です。関数が範囲の上限(最小上限)を返す[1,3) ∩ ℕ = {1, 2}
ことを期待しています。upper
何か不足していますか?