SQL 方言通

首页 / 字符串

REPLACE 替换全部匹配的子串

REPLACE(str, old, new) 把 str 中所有 old 子串替换成 new,按普通字符匹配,不是正则。七个引擎都同名支持,任一参数为 NULL 时返回 NULL。要注意 StarRocks 3.0 之前按正则实现,Spark 允许省略第三个参数。

各引擎写法 · 迁移注意事项 · 示例

各引擎写法

引擎支持写法说明依据
MaxCompute支持REPLACE(str, old, new)MaxCompute 2.0 扩展函数。只替换与 old 完全重合的部分,没有匹配时返回原字符串,任一参数为 NULL 时返回 NULL。官方文档
Hologres支持REPLACE(str, old_str, new_str)参数和返回值都是 TEXT。官方文档
StarRocks支持REPLACE(str, pattern, repl)3.0 起按普通字符匹配,区分大小写。3.0 之前按 regexp_replace 实现。任一参数为 NULL 时返回 NULL。官方文档
Doris支持REPLACE(str, old, new)替换全部匹配,区分大小写。old 为空字符串时返回原字符串,任一参数为 NULL 时返回 NULL。官方文档已实测 4.1.5
Hive支持replace(string A, string OLD, string NEW)Hive 1.3.0 和 2.1.0 起提供,替换所有不重叠的匹配,例如 replace('ababab', 'abab', 'Z') 返回 'Zab'。官方文档已实测 4.2.1
Spark SQL支持replace(str, search[, replace])Spark 2.3.0 起提供。第三个参数可以省略,省略或为空字符串时直接删除 search。官方文档
Flink SQL支持REPLACE(string1, string2, string3)替换所有不重叠的匹配,例如 REPLACE('ababab', 'abab', 'z') 返回 'zab'。官方文档已实测 2.3.0

迁移注意事项

示例

去掉手机号中的横线

MaxCompute
SELECT REPLACE('138-0000-1234', '-', '');  -- 13800001234
Hologres
SELECT REPLACE('138-0000-1234', '-', '');  -- 13800001234
StarRocks
SELECT REPLACE('138-0000-1234', '-', '');  -- 13800001234
Doris
SELECT REPLACE('138-0000-1234', '-', '');  -- 13800001234
Hive
SELECT replace('138-0000-1234', '-', '');  -- 13800001234
Spark SQL
SELECT replace('138-0000-1234', '-');  -- 13800001234
Flink SQL
SELECT REPLACE('138-0000-1234', '-', '');  -- 13800001234

同类函数

字符串:全部引擎写法对照

核对日期: · 提交勘误