问题标签 [set-returning-functions]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
811 浏览

postgresql - PostgreSQL - 插入从 xxxx 年到 yyyy 年的所有周末日期

我已经建立了一个假期表,其中包含从 2000 年到 2050 年的所有公共假期。但我也应该把所有周末日期都放好,现在我正试图找到一种方法。有人可以提出一些建议吗?我检查并有计算工作日数的功能,但我需要插入这两年之间的所有周末。

0 投票
5 回答
26608 浏览

sql - postgresql generate_series 几个月

我正在尝试使用 generate_series 函数在 PostgreSQL 中生成一个系列。我需要从 2008 年 1 月到current month + 12(一年后)的一系列月份。我正在使用并仅限于 PostgreSQL 8.3.14(所以我在 8.4 中没有时间戳系列选项)。

我知道如何获得一系列的日子,例如:

但我不确定如何做几个月。

0 投票
2 回答
61960 浏览

postgresql - PostgreSQL:错误:42601:返回“记录”的函数需要列定义列表

据我所知,我的功能与我看到的示例非常相似。有人能告诉我我是如何让它工作的吗?

0 投票
6 回答
136091 浏览

sql - 带有元素编号的 PostgreSQL unnest()

当我有一个带有分隔值的列时,我可以使用该unnest()函数:

如何包含元素编号?IE:

我想要源字符串中每个元素的原始位置。我尝试过使用窗口函数(row_number()rank()),但我总是得到1. 也许是因为它们在源表的同一行?

我知道这是一个糟糕的桌子设计。这不是我的,我只是想解决它。

0 投票
1 回答
2860 浏览

arrays - 从正则表达式结果中删除大括号

问题

这段代码:

返回这些结果:

而不是以下结果:

相关链接

问题

使用 PostgreSQL 9.x 删除大括号的最有效方法是什么?

0 投票
1 回答
4092 浏览

postgresql - 在不创建临时表的情况下加入数组 unnest 的输出

我在 UDF 中有一个查询(如下所示),它unnest()是一个整数数组并连接它,我在我的 pgplsql UDF 中创建了一个本地临时表,因为我知道这是有效的。是否可以unnest直接在查询中使用来执行连接,而不必创建临时表?

我想这样做的原因是我希望能够查看查询计划,而不必求助于查看服务器日志中的自动解释输出。本地临时表可以防止这种情况。即,我无法复制粘贴结果查询并逐字执行。

0 投票
2 回答
5311 浏览

regex - 带有正则表达式的 CASE:“在不能接受集合的上下文中调用的集合值函数”

我正在尝试在 PostgreSQL 9.0.1 中进行稍微复杂的字符串转换。中的值my_col是长字符串,格式如下:

我需要将“X12”部分转换为已知数值,有几个不同的已知值(最多 5 个)。

我希望能够在一个查询中确定这一点,而无需子查询。但是,以下内容对我不起作用。最后一列是引发异常的列。由于某种原因,我似乎无法CASE使用这些函数的输出组合来执行该语句。我仅出于演示目的而包含了前面的列。

相反,我得到了错误:

有人可以给我建议吗?

0 投票
1 回答
43 浏览

sql - 如何更改此函数中返回值的格式?

我有一个这样创建的函数:

当我这样调用函数时:

结果是这样的:

如何从我的函数中获得包含多列的表的返回?如何让每个单独的列显示?如果函数内部的整个查询是从命令行正常执行的,我希望返回是这样的。谢谢!

0 投票
2 回答
5413 浏览

sql - PostgreSQL - 按数组排序

我有 2 个表 - course 包含课程的 ID 和名称,tagCourse 包含每个课程的标签。

我想编写一个函数,通过给定的标签数组搜索课程并返回按匹配标签数量排序的课程。但是我不知道如何正确有效地编写它。请帮我。

IE。

0 投票
1 回答
3315 浏览

arrays - 转换 unnest() 的结果时丢失 NULL 元素

unnest()在扩展数组后进行投射时,我偶然发现了非常奇怪的行为。

介绍

使用 unnest() 有三种基本语法变体:

1) SELECT unnest('{1,NULL,4}'::int[]) AS i;
2) SELECT i FROM unnest('{2,NULL,4}'::int[]) AS i;
3)SELECT i FROM (SELECT unnest('{3,NULL,4}'::int[])) AS t(i);

所有这些都在结果中包含一行,NULL如预期的那样

要将数组元素转换为不同的类型,可以在扩展数组后立即将元素转换为基本类型,或者在扩展之前将数组本身转换为不同的数组类型。第一个变体对我来说似乎更简单更短:

甲)SELECT unnest('{4,NULL,1}'::int[])::text;
乙)SELECT unnest('{4,NULL,2}'::int[]::text[]);

奇怪的行为

所有可能的组合,除了2A)

由于某种原因,无法2)A)

错误:“::”处或附近的语法错误

我可以接受。由于某种原因尚未实施的罕见极端案例。
但是,所有其他组合都会飞:

1A) SELECT unnest('{1,NULL,1}'::int[])::text AS i;
2A)SELECT i FROM unnest('{2,NULL,1}'::int[])::text AS i;
3A) SELECT i FROM (SELECT unnest('{3,NULL,1}'::int[])::text) AS t(i);
1B) SELECT unnest('{1,NULL,2}'::int[]::text[]) AS i;
2B) SELECT i FROM unnest('{2,NULL,2}'::int[]::text[]) AS i;
3B)SELECT i FROM (SELECT unnest('{3,NULL,2}'::int[]::text[])) AS t(i);

结果与上述相同。

真的很奇怪的行为

以下意见A)仅涉及。可以通过替换来避免该问题B)

正如预期的那样,到目前为止,我们已经看到数组中的元素在所有查询中都NULL产生了具有值的行。但是,将结果从某些数组类型转换为某些基本类型NULL时,情况并非如此。

这里具有NULL 值的行突然消失(!):

例子

我去看看兔子洞有多深。这里有些例子:

NULL消失:

NULL停留:

这似乎是不可接受的。

在测试了相当多的组合之后,模式似乎是:

相关类型之间的强制转换会导致NULL元素丢失。
在不相关类型之间进行强制转换会导致NULL元素被保留。
除了varchar[]->text反之亦然,这破坏了我的这个小假设。或者varchartext我想象的不同。

使用 PostgreSQL 9.1 和 9.2 测试。相同的结果。
-> SQL小提琴

问题

我在这里错过了什么吗?有人可以解释这种行为吗?
如果没有,问题就变成了:我应该继续提交错误报告吗?