我想了解原因
SELECT *, regexp_matches(A, 'pattern') FROM table
Run Code Online (Sandbox Code Playgroud)
只会返回A有模式的行pattern,即使我没有WHERE子句?
regexp_matches如果没有匹配会返回什么?我原以为是null,但如果是,null那么查询应该只返回null所有那些不匹配的结果?
如何构建自定义函数来执行类似的操作:当参数适合时,相应的行将被过滤,以便我不必追加where?
使用Set Returning Function作为标量函数是一个副作用.Set Returning函数返回一个表而不是标量函数,通常在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)
| 归档时间: |
|
| 查看次数: |
1124 次 |
| 最近记录: |