您好,我是小DAI,专注于数据库管理员相关的技术问答,请问有什么可以帮您?

REPLACE 函数 [字符串]

用一个子串替换各个位置出现的另一个子串。

语法

REPLACE ( , , )

参数

如果有某个参数为 NULL,此函数返回 NULL

参数说明original-string被搜索的字符串。此字符串可以为任意长度。search-string将被搜索并以 进行替换的字符串。此字符串的长度不应超过 255 个字节。如果 是空字符串,则按原样返回原始字符串。 replace-string替代字符串,用于替换 。可为任意长度。如果 是空字符串,则删除出现的所有 。 

返回值

LONG BINARY

LONG VARCHAR

LONG NVARCHAR

注意结果数据类型为 LONG VARCHAR。如果在 SELECT INTO 语句中使用 REPLACE,您必须具有“非结构化数据分析选项”许可证,或使用 CAST 并将 REPLACE 设置为正确的数据类型和大小。

注释

REPLACE 函数的结果数据类型为 LONG VARCHAR。如果在 SELECT INTO 语句中使用 REPLACE,您必须具有“非结构化数据分析选项”许可证,或使用 CAST 并将 REPLACE 设置为正确的数据类型和大小。

如果所有参数的数据类型都为二进制数据类型,则 REPLACE 函数与 BYTE_REPLACE 函数的行为基本相同。

有两种方法可以解决这一问题:

  • 声明一个局部临时表,然后执行 INSERT: DECLARE local temporary table #mytable (name_column char(10)) on commit preserve rows;INSERT INTO #mytable SELECT REPLACE(name,'0','1') FROM dummy_table01;

  • 使用 CAST: SELECT CAST(replace(name, '0', '1') AS Char(10)) into #mytable from dummy_table01;

    如果需要在< replace-string> 宽于 时控制结果列的宽度,请使用 CAST 函数。例如:

    CREATE TABLE aa(a CHAR(5));
    

    INSERT INTO aa VALUES(‘CCCCC’);

    COMMIT;

    SELECT a, CAST(REPLACE(a,’C’,’ZZ’) AS CHAR(5)) FROM aa;

    标准和兼容性

  • SQL - ISO/ANSI SQL 语法的服务商扩展。

  • SAP 数据库产品 - 与 SAP ASE 兼容。

    示例

    以下语句返回值 "xx.def.xx.ghi":

    SELECT REPLACE( 'abc.def.abc.ghi', 'abc', 'xx' ) FROM iq_dummy

    以下语句生成包含 ALTER PROCEDURE 语句的结果集,这些语句在执行时会修复那些引用已重命名的表的存储过程。(表名必须唯一才可进行使用。)

    SELECT REPLACE(
    

    replace(proc_defn,'OldTableName','NewTableName'),

    'create procedure',

    'alter procedure')

    FROM SYS.SYSPROCEDURE

    WHERE proc_defn LIKE '%OldTableName%'

    对于 LIST 函数,使用逗号以外的分隔符:

    SELECT REPLACE( list( table_id ), ',', '--')
    

    FROM SYS.ISYSTAB

    WHERE table_id <= 5