第116章 SQL函数 REPLACE
第116章 SQL函数 REPLACE
字符串函数,用于替换字符串中的子字符串。
大纲
REPLACE(string,oldsubstring,newsubstring)
参数
-
string
- 作为子字符串搜索目标的字符串表达式。 -
oldsubstring
- 字符串中要匹配的子字符串。 -
newsubstring
- 用于替换oldsubstring
的子字符串。
描述
REPLACE
在字符串中搜索子字符串并替换所有匹配项。匹配区分大小写。如果找到匹配项,它将用 newsubstring
替换 oldsubstring
的每个实例。替换子串可能比它替换的子串长或短。如果找不到子字符串,则 REPLACE
将原样返回原字符串。
无论字符串的数据类型如何,REPLACE
返回的值始终是数据类型 VARCHAR
。这允许替换操作,例如 REPLACE(12.3,'.','_')
。
REPLACE
不能对字符串、oldsubstring
或 newsubstring
参数使用 %Stream.GlobalCharacter
字段。尝试这样做会生成 SQLCODE -37
错误。
空字符串是字符串值。因此,可以将空字符串用于任何参数值。但是,请注意 ObjectScript 空字符串作为 NULL
传递给 SQL
。
NULL
不是 SQL
中的数据值。因此,为任何 REPLACE
参数指定 NULL
将返回 NULL
,无论是否发生匹配。
此函数提供与 Transact-SQL
实现的兼容性。
REPLACE, STUFF, and $TRANSLATE
REPLACE
和 STUFF
都执行子字符串替换。 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=