默认情况下,在 PostgreSQL 中,regexp_replace()
替换字符串中第一次出现的子字符串,同时replace()
替换字符串中所有出现的子字符串。为什么默认行为不同?
(我知道regexp_replace
可以使用该g
选项替换字符串中所有出现的子字符串。)
例子:
SELECT regexp_replace('hello world', 'o', 'z'); -- returns "hellz world"
SELECT regexp_replace('hello world', 'o', 'z', 'g'); -- returns "hellz wzrld"
SELECT replace('hello world', 'o', 'z'); -- returns: "hellz wzrld"
为什么?
因为 Postgres
replace()
是一个标准的 SQL 函数,其工作方式与其他 RDBMS 相同。示例:replace()
在 SQL Server 中:虽然
regexp_replace()
用于...正则表达式的处理显然是由 POSIX 标准指导的,并且与实现它的其他工具相同。手册: