我想了解为什么
SELECT *, regexp_matches(A, 'pattern') FROM table
即使我没有子句,也只会返回A
有模式的行?pattern
WHERE
regexp_matches
如果没有匹配,返回什么?我原以为是null
,但如果是,null
那么查询应该简单地返回null
所有那些不匹配的结果吗?
如何构建自定义函数来做类似的事情:当参数适合时,过滤相应的行,这样我就不必追加where
?
我想了解为什么
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; 一种 --- 1 2 (2 行) postgres=# select a, generate_series(1,0) from foo; 一个 | 生成系列 ---+-------- (0 行) postgres=# select a, generate_series(1,1) from foo; 一个 | 生成系列 ---+-------- 1 | 1 2 | 1 (2 行) postgres=# select a, generate_series(1,2) from foo; 一个 | 生成系列 ---+-------- 1 | 1 1 | 2 2 | 1 2 | 2 (4 行)
可能您会使用带有正则表达式的子字符串函数。它是标量函数:
postgres=# select 'Some string', substring('Ahoj29' from '^[0-9]+'); ?柱子?| 子串 -------------+------------ 一些字符串 | (1 行) postgres=# select 'Some string', substring('Ahoj29' from '[0-9]+'); ?柱子?| 子串 -------------+------------ 一些字符串 | 29 (1 行)