LOCATE_IN_STRING 标量函数
LOCATE_IN_STRING函数用于返回参数在指定字符串中的起始位置。
该模式是 SYSIBM。
LOCATE_IN_STRING函数用于返回一个字符串(称为搜索字符串 )在另一个字符串(称为源字符串 )中的起始位置。 如果未找到搜索字符串 ,且两个参数均不为空,则结果为零。 如果找到搜索字符串 ,则结果为从1到源字符串实际长度的数字。
如果指定了可选启动 ,则还可以指定可选实例编号。 实例参数用于确定搜索字符串在源字符串中的具体位置。 每个唯一实例可以包含前一个实例中的任何字符,但不能包含前一个实例中的所有字符。 可选字符串单元可用于指定函数的开始和结果以何种单位表示。
如果搜索字符串的长度为零,则函数返回的结果为1。 如果源字符串的长度为零,则函数返回的结果为0。 如果两个条件都不满足,且搜索字符串的值等于源字符串值中连续位置的子字符串的相同长度,则函数返回的结果是源字符串值中该子字符串的起始位置;否则,函数返回的结果为0。
- source-string
- 用于指定要搜索的源字符串的表达式。 源字符串必须返回一个内置字符串数据类型、图形字符串数据类型或二进制字符串数据类型的值。
该参数也可以是数字数据类型。 数字参数将隐式强制转换为 VARCHAR 数据类型。
- search-string
- 用于指定作为搜索对象的字符串的表达式。 搜索字符串必须返回一个值,该值是内置字符串数据类型、图形字符串数据类型或二进制字符串数据类型,且实际长度不超过4000字节。
该参数也可以是数字数据类型。 数字参数将隐式强制转换为 VARCHAR 数据类型。
- start
- 用于指定在 source-string 中开始搜索的位置的表达式。 表达式必须返回一个内置的整数或小整数数据类型。
参数也可以是字符串或图形字符串数据类型。 字符串输入隐式转换为DECFLOAT(34)的数值,然后赋值给INTEGER。
如果整数值大于零,则从开始位置开始搜索,并逐个位置搜索到字符串结尾。 如果整数值小于零,则搜索从 LENGTH( 源字符串 ) + start + 1 开始,并继续搜索每个位置,直到字符串的开头。
如果未指定起始值 ,则默认值为1。 如果整数值为零,则返回错误。
- instance
- 用于指定要在 source-string 中搜索的 search-string 实例的表达式。 表达式必须返回一个内置的整数或小整数数据类型。 如果未指定实例 ,则默认值为1。 整数值必须大于或等于1。
- CODEUNITS16、 CODEUNITS32 或 OCTETS
- 指定用于表示开始和结果的字符串单位。 如果源字符串是一个定义为位数据的字符串,则不能指定 CODEUNITS16 和 CODEUNITS32。 如果源字符串是图形字符串,则无法指定“八位字节”。 如果源字符串是二进制字符串,则无法指定 CODEUNITS16、 CODEUNITS32 和OCTETS。
- CODEUNITS16
- 规定以16位 UTF-16 代码单元表示开始和结果。
- CODEUNITS32
- 指定以32位 UTF-32 代码单元表示开始和结果。
- OCTETS
- 指定以字节为单位表示开始和结果。
如果未明确指定字符串单位,则结果的数据类型将决定所使用的字符串单位。 如果结果是图形数据,则启动和返回位置以两个字节为单位表示;否则以字节为单位表示。
有关 CODEUNITS16、 CODEUNITS32 和OCTETS的更多信息,请参阅字符串单元规格。
第一个和第二个参数必须具有兼容的字符串类型。 如需了解兼容性的更多信息,请参阅比较的转换规则。
在每个搜索位置,当源字符串中该位置后的子字符串和长度(搜索字符串) -1的值与搜索字符串相等时,即视为匹配。
函数的结果是一个大整数。 结果就是搜索字符串在源字符串中的起始位置。 该值与字符串的开头有关(与起始位置无关)。
结果可以为空; 如果任何自变量为空,那么结果为空值。
注意
- 语法替代方案:
- INSTR是LOCATE_IN_STRING的同义词。
示例
- 示例 1:
- 从字符串“WINNING”的开头开始,按字节数搜索字符“N”在字符串中的位置。
返回值:SELECT LOCATE_IN_STRING('WINNING','N',1,3,OCTETS), LOCATE_IN_STRING('WINNING','N',3,2,OCTETS), LOCATE_IN_STRING('WINNING','N',3,3,OCTETS), LOCATE_IN_STRING('WINNING','N',-1,3,OCTETS), LOCATE_IN_STRING('WINNING','N',-3,2,OCTETS), LOCATE_IN_STRING('WINNING','N',-3,3,OCTETS) FROM SYSIBM.SYSDUMMY1;6 4 6 3 3 0
