问题标签 [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.
postgresql - PostgreSQL - 插入从 xxxx 年到 yyyy 年的所有周末日期
我已经建立了一个假期表,其中包含从 2000 年到 2050 年的所有公共假期。但我也应该把所有周末日期都放好,现在我正试图找到一种方法。有人可以提出一些建议吗?我检查并有计算工作日数的功能,但我需要插入这两年之间的所有周末。
sql - postgresql generate_series 几个月
我正在尝试使用 generate_series 函数在 PostgreSQL 中生成一个系列。我需要从 2008 年 1 月到current month + 12
(一年后)的一系列月份。我正在使用并仅限于 PostgreSQL 8.3.14(所以我在 8.4 中没有时间戳系列选项)。
我知道如何获得一系列的日子,例如:
但我不确定如何做几个月。
postgresql - PostgreSQL:错误:42601:返回“记录”的函数需要列定义列表
据我所知,我的功能与我看到的示例非常相似。有人能告诉我我是如何让它工作的吗?
sql - 带有元素编号的 PostgreSQL unnest()
当我有一个带有分隔值的列时,我可以使用该unnest()
函数:
如何包含元素编号?IE:
我想要源字符串中每个元素的原始位置。我尝试过使用窗口函数(row_number()
等rank()
),但我总是得到1
. 也许是因为它们在源表的同一行?
我知道这是一个糟糕的桌子设计。这不是我的,我只是想解决它。
arrays - 从正则表达式结果中删除大括号
问题
这段代码:
返回这些结果:
而不是以下结果:
相关链接
问题
使用 PostgreSQL 9.x 删除大括号的最有效方法是什么?
postgresql - 在不创建临时表的情况下加入数组 unnest 的输出
我在 UDF 中有一个查询(如下所示),它unnest()
是一个整数数组并连接它,我在我的 pgplsql UDF 中创建了一个本地临时表,因为我知道这是有效的。是否可以unnest
直接在查询中使用来执行连接,而不必创建临时表?
我想这样做的原因是我希望能够查看查询计划,而不必求助于查看服务器日志中的自动解释输出。本地临时表可以防止这种情况。即,我无法复制粘贴结果查询并逐字执行。
regex - 带有正则表达式的 CASE:“在不能接受集合的上下文中调用的集合值函数”
我正在尝试在 PostgreSQL 9.0.1 中进行稍微复杂的字符串转换。中的值my_col
是长字符串,格式如下:
我需要将“X12”部分转换为已知数值,有几个不同的已知值(最多 5 个)。
我希望能够在一个查询中确定这一点,而无需子查询。但是,以下内容对我不起作用。最后一列是引发异常的列。由于某种原因,我似乎无法CASE
使用这些函数的输出组合来执行该语句。我仅出于演示目的而包含了前面的列。
相反,我得到了错误:
有人可以给我建议吗?
sql - 如何更改此函数中返回值的格式?
我有一个这样创建的函数:
当我这样调用函数时:
结果是这样的:
如何从我的函数中获得包含多列的表的返回?如何让每个单独的列显示?如果函数内部的整个查询是从命令行正常执行的,我希望返回是这样的。谢谢!
sql - PostgreSQL - 按数组排序
我有 2 个表 - course 包含课程的 ID 和名称,tagCourse 包含每个课程的标签。
我想编写一个函数,通过给定的标签数组搜索课程并返回按匹配标签数量排序的课程。但是我不知道如何正确有效地编写它。请帮我。
IE。
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
反之亦然,这破坏了我的这个小假设。或者varchar
和text
我想象的不同。
使用 PostgreSQL 9.1 和 9.2 测试。相同的结果。
-> SQL小提琴
问题
我在这里错过了什么吗?有人可以解释这种行为吗?
如果没有,问题就变成了:我应该继续提交错误报告吗?