0
範囲の配列について(例:int4range[]
)、range functions範囲の配列の項目をチェックする優雅な方法
と仮定テーブルt
ので
CREATE TABLE t (id serial, r int4range[]);
INSERT INTO t (r) VALUES
('{"[2,5]","[100,200]"}'::int4range[]),
('{"[6,9]","[201,300]"}'::int4range[]);
として、またはがある場合に行うに少ない醜い方法があります
SELECT * FROM (SELECT *, unnest(r) as ur FROM t) t2 WHERE 7<@ur; -- row2
SELECT * FROM (SELECT *, unnest(r) as ur FROM t) t2 WHERE 70<@ur; -- empty
のようなクエリを必要とし、チェックしますこの種のクエリ?
注:シンプル*
クエリでテーブルを返す関数、
CREATE FUNCTION t_where(int4) RETURNS t AS $f$
SELECT id,r -- but need *
FROM (SELECT *, unnest(r) as ur FROM t) t2
WHERE $1 <@ ur
$f$ LANGUAGE SQL IMMUTABLE;
を構築するために、一般的な「テンプレート」を必要とするので、同じクエリは、SELECT * FROM t_where(7)
ある
が、私は(エレガントな方法が必要です)は*
を使用して作成し、フィールド(id,r
)は表示しません。あなたはサブクエリを必要としない
'トンを選択* ...'? –
こんにちは@a_horse_with_no_nameはい、 't。*'ですが、ネストされていないコンテキストには 't'はありません。 –