LOCATE_IN_STRING 标量函数

LOCATE_IN_STRING 函数返回字符串 (称为 search-string ) 的起始位置 在另一个字符串 (称为 source-string) 中。

Read syntax diagramSkip visual syntax diagramLOCATE_IN_STRING(source-string ,search-string ,start,instance ,CODEUNITS16CODEUNITS32OCTETS )

模式为 SYSIBM

如果找不到 search-string ,并且这两个参数都不为空,那么结果为零。 如果找到 search-string ,那么结果是从 1 到 source-string的实际长度的数字。 搜索是使用数据库的整理完成的,除非 search-stringsource-string 定义为二进制字符串或 FOR BIT DATA ,在这种情况下,搜索是使用二进制比较完成的。

如果指定了可选的 start ,那么它指示要开始搜索的 source-string 中的字符位置。 如果指定了 start ,那么还可以指定实例号。 instance 自变量用于确定 search-stringsource-string中的特定出现位置。 可以指定可选字符串单元,以指示以哪些单元表示 start 和函数的结果。

如果 search-string 的长度为零,那么函数返回的结果为 1。 如果 source-string 的长度为零,那么函数返回的结果为 0。 如果这两个条件都不存在,并且 search-string 的值等于 source-string的值中相邻位置的子串的相同长度,那么该函数返回的结果是该子串在 source-string 值中的起始位置; 否则,该函数返回的结果为 0。

source-string
用于指定要在其中进行搜索的字符串的表达式。 表达式必须返回一个内置字符串,数字,布尔值或日期时间数据类型的值。 如果该值不是字符串数据类型,那么在对函数求值之前会将其隐式强制类型转换为 VARCHAR。
search-string
用于指定作为搜索对象的字符串的表达式。 表达式必须返回内置 CHAR , VARCHAR , GRAPHIC , VARGRAPHIC ,二进制字符串,数字,布尔值或日期时间数据类型的值。 如果该值不是 CHAR , VARCHAR , GRAPHIC , VARGRAPHIC 或二进制字符串数据类型,那么在对该函数进行求值之前,会将其隐式强制转换为 VARCHAR。 表达式不能由 LOB 文件引用变量指定。
start
用于指定在 source-string 中搜索匹配项的起始位置的表达式。 表达式必须返回内置数字, CHAR , VARCHAR , GRAPHIC 或 VARGRAPHIC 数据类型的值。 如果该值不是 INTEGER 类型,那么在对该函数进行求值之前,会将其隐式强制转换为 INTEGER。

如果整数的值大于零,那么搜索将从 start 开始,并针对每个位置继续到字符串末尾。 如果整数的值小于零,那么搜索从 LENGTH (source-string) + start + 1 开始,并针对每个位置继续到字符串开头。

如果未指定 start ,那么缺省值为 1。 如果指定了 OCTETS 并且 source-string 是图形数据,那么整数的值必须为奇数 (SQLSTATE 428GC)。 如果整数的值为零,那么将返回错误 (SQLSTATE 42815)。

instance
用于指定要在 source-string 中搜索的 search-string 实例的表达式。 表达式必须返回内置数字, CHAR , VARCHAR , GRAPHIC 或 VARGRAPHIC 数据类型的值。 如果该值不是 INTEGER 类型,那么在对该函数进行求值之前,会将其隐式强制转换为 INTEGER。 如果未指定 实例 ,那么缺省值为 1。 整数的值必须大于或等于 1 (SQLSTATE 42815)。
CODEUNITS16、CODEUNITS32 或 OCTETS
指定 start 的字符串单元和结果。 CODEUNITS16 指定 start ,结果将以 16 位 UTF-16 代码单元表示。 CODEUNITS32 指定 start 和结果将以 32 位 UTF-32 代码单元表示。 OCTETS 指定 start ,结果将以字节表示。

如果将字符串单元指定为 CODEUNITS16 或 CODEUNITS32,并且 search-stringsource-string 是二进制字符串或 FOR BIT DATA ,那么将返回错误 (SQLSTATE 428GC)。 如果将字符串单元指定为 CODEUNITS16 或 OCTETS ,并且 source-string 的字符串单元为 CODEUNITS32,那么将返回错误 (SQLSTATE 428GC)。

如果未显式指定字符串单元,并且 source-string 是字符或图形字符串,那么 source-string 的字符串单元将确定用于结果和 start (如果已指定) 的单元。 否则,它们以字节表示。

如果将基于语言环境敏感的 UCA 的整理用于此功能,那么 CODEUNITS16 选项将提供最佳性能特征。

有关 CODEUNITS16, CODEUNITS32和 OCTETS的更多信息,请参阅 字符串中的 内置函数中的字符串单元

第一个和第二个自变量必须具有兼容的字符串类型。 有关兼容性的更多信息,请参阅 字符串转换规则。 在 Unicode 数据库中,如果一个字符串自变量是字符 (不是 FOR BIT DATA) ,而另一个字符串自变量是图形,那么 search-string 将转换为 source-string 的数据类型进行处理。 如果一个自变量是字符 FOR BIT DATA ,那么另一个自变量不能是图形 (SQLSTATE 42846)。

在每个搜索位置,当该位置的子串和 source-string中搜索位置右侧的 LENGTH (search-string)-1 值等于 search-string时,将找到匹配项。

函数的结果是一个大整数。 结果是 search-string 实例在 source-string中的起始位置。 该值相对于字符串的开头 (不考虑 start的规范)。 如果参数可以为空值,那么结果可以为空值;如果参数为空值,那么结果为空值。

INSTR 可用作 LOCATE_IN_STRING 的同义词。

INSTRB 标量函数等同于调用 LOCATE_IN_STRING 函数并指定 OCTETS (如果允许) 以指示开始位置和结果以字节表示。

示例

  • 示例 1: 通过从字符串末尾进行搜索,找到字符串 J ü r g e n 生活在 H e g e l s t r a ß e 中的字符 ß ,并将主变量 POSITION 设置为字符串中的位置 (以 CODEUNITS32 单位度量)。
        SET :POSITION = LOCATE_IN_STRING('Jürgen lives on Hegelstraße',
                                        'ß',-1,CODEUNITS32);
    
    主变量 POSITION 的值设置为 26。
  • 示例 2: 查找字符串 WINNING 中字符 N 第三次出现的位置,方法是从字符串的开头进行搜索,然后将主变量 POSITION 设置为字符串中字符的位置 (以字节计)。
        SET :POSITION =
        LOCATE_IN_STRING('WINNING','N',1,3,OCTETS);
    
    主变量 POSITION 的值设置为 6。