gpt4 book ai didi

sql - 为什么没有匹配行的 regexp_matches 像过滤器一样工作,并且不返回?

转载 作者:行者123 更新时间:2023-11-29 11:28:07 24 4
gpt4 key购买 nike

我想知道为什么

SELECT *, regexp_matches(A, 'pattern') FROM table

是否只返回 A 具有模式 pattern 的行,即使我没有 WHERE 子句?

如果没有匹配项,regexp_matches 返回什么?我原以为它是 null,但如果它是 null,那么对于所有那些不匹配的结果,查询应该简单地返回 null

我如何构建自定义函数来做类似的事情:当参数合适时,相应的行被过滤,这样我就不必在 where 后面追加?

最佳答案

这是使用 Set Returning Function 作为标量函数的副作用。 Set Returning Functions 返回一个表而不是标量函数,通常在 FROM 子句中使用。您可以像标量函数一样使用它(出于某些原因),但有时会产生非常奇怪的副作用。通常您不会在标量函数位置上使用这些函数。

postgres=# select * from foo; a --- 1 2(2 rows)postgres=# select a, generate_series(1,0) from foo; a | generate_series ---+-----------------(0 rows)postgres=# select a, generate_series(1,1) from foo; a | generate_series ---+----------------- 1 |               1 2 |               1(2 rows)postgres=# select a, generate_series(1,2) from foo; a | generate_series ---+----------------- 1 |               1 1 |               2 2 |               1 2 |               2(4 rows)

您可能会使用带正则表达式的子字符串函数。它是标量函数:

postgres=# select 'Some string', substring('Ahoj29' from '^[0-9]+');  ?column?   | substring -------------+----------- Some string | (1 row)postgres=# select 'Some string', substring('Ahoj29' from '[0-9]+');  ?column?   | substring -------------+----------- Some string | 29(1 row)

关于sql - 为什么没有匹配行的 regexp_matches 像过滤器一样工作,并且不返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19386856/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com