Por padrão, no PostgreSQL, regexp_replace()
substitui a primeira ocorrência de uma substring em uma string, enquanto replace()
substitui todas as ocorrências de uma substring em uma string. Por que o comportamento padrão é diferente?
(Eu sei que com regexp_replace
um pode-se usar a g
opção de substituir todas as ocorrências de uma substring em uma string.)
Exemplos:
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"
Por quê?
Porque o Postgres
replace()
é uma função SQL padrão que funciona da mesma forma que em outros RDBMS. Exemplo:replace()
no SQL Server:Enquanto
regexp_replace()
é usado para...A manipulação de expressões regulares é obviamente guiada pelo padrão POSIX e funciona da mesma forma que outras ferramentas que o implementam. O manual: