小编Vil*_*uss的帖子

将单独的范围组合成最大可能的连续范围

我正在尝试组合多个日期范围(我的负载大约为最多 500 个,大多数情况下为 10 个),这些日期范围可能会或可能不会重叠到最大的可能连续日期范围中。例如:

数据:

CREATE TABLE test (
  id SERIAL PRIMARY KEY NOT NULL,
  range DATERANGE
);

INSERT INTO test (range) VALUES 
  (DATERANGE('2015-01-01', '2015-01-05')),
  (DATERANGE('2015-01-01', '2015-01-03')),
  (DATERANGE('2015-01-03', '2015-01-06')),
  (DATERANGE('2015-01-07', '2015-01-09')),
  (DATERANGE('2015-01-08', '2015-01-09')),
  (DATERANGE('2015-01-12', NULL)),
  (DATERANGE('2015-01-10', '2015-01-12')),
  (DATERANGE('2015-01-10', '2015-01-12'));
Run Code Online (Sandbox Code Playgroud)

表看起来像:

 id |          range
----+-------------------------
  1 | [2015-01-01,2015-01-05)
  2 | [2015-01-01,2015-01-03)
  3 | [2015-01-03,2015-01-06)
  4 | [2015-01-07,2015-01-09)
  5 | [2015-01-08,2015-01-09)
  6 | [2015-01-12,)
  7 | [2015-01-10,2015-01-12)
  8 | [2015-01-10,2015-01-12)
(8 rows)
Run Code Online (Sandbox Code Playgroud)

预期结果:

         combined
--------------------------
 [2015-01-01, 2015-01-06)
 [2015-01-07, 2015-01-09)
 [2015-01-10, ) …
Run Code Online (Sandbox Code Playgroud)

postgresql aggregate range-types

29
推荐指数
3
解决办法
1万
查看次数

Postgres <-> 运算符有什么作用?

我正在阅读有关物化视图Postgres 文档,在一个示例中,他们使用以下内容:

SELECT word FROM words ORDER BY word <-> 'caterpiler' LIMIT 10;
Run Code Online (Sandbox Code Playgroud)

我试图在我自己的数据库上运行类似的查询,但出现错误。

[42883] ERROR: operator does not exist: character varying <-> unknown
Run Code Online (Sandbox Code Playgroud)

我(可能)不需要使用运算符,但我只是好奇它的作用。

注意事项

  • 我正在运行与文档相同的版本(9.3)
  • 我确实尝试过谷歌搜索这个问题,但<->即使你用引号将它括起来,谷歌也会忽略它。

postgresql operator

10
推荐指数
1
解决办法
6365
查看次数

Postgres中奇怪的UTC偏移时区解析

Postgres 在解析时区时表现出一些奇怪的行为,或者我只是不明白它是如何工作的。

文档

SELECT TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40-05' AT TIME ZONE 'MST';
Result: 2001-02-16 18:38:40
Run Code Online (Sandbox Code Playgroud)

该示例采用 EST (UTC-5) 中指定的时间戳并将其转换为 MST (UTC-7) 中的本地时间。

似乎意味着“MST”可以与“UTC-7”互换,但行为与您期望的相反。

SELECT TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40-05' AT TIME ZONE 'UTC-7';
Result: 2001-02-17 08:38:40
Run Code Online (Sandbox Code Playgroud)

它没有使用时区“UTC-7”,而是使用时区“UTC+7”,相差 14 小时。

使用 ISO 8601 时区符号也会产生与预期结果相反的结果:

SELECT TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40-05' AT TIME ZONE '-7';
Result: 2001-02-17 08:38:40

SELECT TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40-05' AT TIME ZONE '-07';
Result: 2001-02-17 08:38:40

SELECT TIMESTAMP …
Run Code Online (Sandbox Code Playgroud)

postgresql timezone

4
推荐指数
1
解决办法
1465
查看次数

标签 统计

postgresql ×3

aggregate ×1

operator ×1

range-types ×1

timezone ×1