【发布时间】:2013-07-08 17:58:38
【问题描述】:
我正在尝试查询包含character varying[] 年份列的表,并将这些年份作为逗号分隔的年份范围字符串返回。年份范围将由数组中存在的连续年份确定,不连续的年份/年份范围应以逗号分隔。
数据类型是character varying[] 而不是integer[] 的原因是因为一些值包含ALL 而不是年份列表。我们可以省略这些结果。
到目前为止,我几乎没有运气解决这个问题,因为我什至不确定从哪里开始。
谁能给我一些指导或提供一个有用的例子来说明如何解决诸如挑战之类的问题?
years_table 示例
+=========+============================+
| id | years |
| integer | character varying[] |
+=========+============================+
| 1 | {ALL} |
| 2 | {1999,2000,2010,2011,2012} |
| 3 | {1990,1991,2007} |
+---------+----------------------------+
输出目标:
示例 SQL 查询:
SELECT id, [year concat logic] AS year_ranges
FROM years_table WHERE 'ALL' NOT IN years
结果:
+====+======================+
| id | year_ranges |
+====+======================+
| 2 | 1999-2000, 2010-2012 |
| 3 | 1990-1991, 2007 |
+----+----------------------+
【问题讨论】:
-
是什么决定了 1999-2000 年与 2010-2012 年之间的跳跃?假设我没有忽略某些内容,我认为您需要更清楚地解释范围。
-
抱歉,我已经修改了介绍性句子,并留下了一些非常需要的细节。已编辑。本质上,我正在尝试从连续的年份范围中创建年份范围。
{2000,2001,2002}将返回2000-2002。不连续的年/年范围将返回以逗号分隔。例如:{2000,2002}将返回2000, 2002,{2000,2001,2002,2005,2006,2008}将返回2000-2002, 2005-2006, 2008。 -
我必须跑一会儿,但立即想到的一个想法是使用 LAG 或 LEAD postgresql.org/docs/current/static/functions-window.html
标签: sql arrays postgresql postgresql-9.2 window-functions