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
)。
'選擇T * ...'? –
嗨@a_horse_with_no_name yes,'t。*',但沒有't'在未登錄的上下文中。 –