文章
姚 鑫 · 四月 18 阅读大约需 3 分钟

第116章 SQL函数 REPLACE

第116章 SQL函数 REPLACE

字符串函数,用于替换字符串中的子字符串。

大纲

REPLACE(string,oldsubstring,newsubstring)

参数

  • string - 作为子字符串搜索目标的字符串表达式。
  • oldsubstring - 字符串中要匹配的子字符串。
  • newsubstring - 用于替换 oldsubstring 的子字符串。

描述

REPLACE 在字符串中搜索子字符串并替换所有匹配项。匹配区分大小写。如果找到匹配项,它将用 newsubstring 替换 oldsubstring 的每个实例。替换子串可能比它替换的子串长或短。如果找不到子字符串,则 REPLACE 将原样返回原字符串。

无论字符串的数据类型如何,REPLACE 返回的值始终是数据类型 VARCHAR。这允许替换操作,例如 REPLACE(12.3,'.','_')

REPLACE 不能对字符串、oldsubstringnewsubstring 参数使用 %Stream.GlobalCharacter 字段。尝试这样做会生成 SQLCODE -37 错误。

空字符串是字符串值。因此,可以将空字符串用于任何参数值。但是,请注意 ObjectScript 空字符串作为 NULL 传递给 SQL

NULL 不是 SQL 中的数据值。因此,为任何 REPLACE 参数指定 NULL 将返回 NULL,无论是否发生匹配。

此函数提供与 Transact-SQL 实现的兼容性。

REPLACE, STUFF, and $TRANSLATE

REPLACESTUFF 都执行子字符串替换。 REPLACE 按数据值搜索子字符串。 STUFF 按字符串位置和长度搜索子字符串。

REPLACE 执行单个字符串对字符串的匹配和替换。 $TRANSLATE 执行逐字符匹配和替换;它可以用相应的指定替换单个字符替换一个或多个指定单个字符的所有实例。它还可以从字符串中删除一个或多个指定单个字符的所有实例。

默认情况下,所有三个函数都区分大小写并替换所有匹配的实例。

示例

以下示例搜索子字符串“P”的每个实例并将其替换为子字符串“K”

SELECT REPLACE('PING PONG','P','K')

KING KONG

以下嵌入式 SQL 示例搜索子字符串“KANSAS”的每个实例,并将其替换为子字符串“NEBRASKA”

/// d ##class(PHA.TEST.SQLFunction).Replace()
ClassMethod Replace()
{
    s str = "KANSAS, ARKANSAS, NEBRASKA"
    &sql(
        SELECT REPLACE(:str,'KANSAS','NEBRASKA') INTO :x
    )
    w !,"SQLCODE=",SQLCODE
    w !,"Output string=",x
}


DHC-APP>d ##class(PHA.TEST.SQLFunction).Replace()
SQLCODE=0
Output string=NEBRASKA, ARNEBRASKA, NEBRASKA

以下示例显示 REPLACE 处理空字符串 ('') 就像处理任何其他字符串值一样:

SELECT REPLACE('','','Nothing'),
       REPLACE('PING PONG','','K'),
       REPLACE('PING PONG','P','')

Nothing PING PONG   ING ONG

以下示例显示 REPLACE 通过返回 NULL 来处理任何 NULL 参数。以下所有 REPLACE 函数都返回 NULL,包括最后一个,其中不发生匹配:

SELECT REPLACE(NULL,'K','P'),
       REPLACE(NULL,NULL,'P'),
       REPLACE('PING PONG',NULL,'K'),
       REPLACE('PING PONG','P',NULL),
       REPLACE('PING PONG','Z',NULL)

NULL NULL NULL NULL NULL                

以下嵌入式 SQL 示例与前面的 NULL 示例相同。它显示了如何在 SQL 中将 ObjectScript 空字符串主变量视为 NULL

/// d ##class(PHA.TEST.SQLFunction).Replace1()
ClassMethod Replace1()
{
    s a = ""
    &sql(
        SELECT 
            REPLACE(:a,'K','P'),
            REPLACE(:a,:a,'P'),
            REPLACE('PING PONG',:a,'K'),
            REPLACE('PING PONG','P',:a),
            REPLACE('PING PONG','Z',:a)
        INTO :v,:w,:x,:y,:z
    )
    w !,"SQLCODE=",SQLCODE
    w !,"Output string=",v
    w !,"Output string=",w
    w !,"Output string=",x
    w !,"Output string=",y
    w !,"Output string=",z
}
DHC-APP>d ##class(PHA.TEST.SQLFunction).Replace1()

SQLCODE=0
Output string=
Output string=
Output string=
Output string=
Output string=
0
0 13
讨论 (0)1
登录或注册以继续