LOCATE_IN_STRING 标量函数
LOCATE_IN_STRING 函数返回字符串 (称为 search-string ) 的起始位置 在另一个字符串 (称为 source-string) 中。
模式为 SYSIBM
如果找不到 search-string ,并且这两个参数都不为空,那么结果为零。 如果找到 search-string ,那么结果是从 1 到 source-string的实际长度的数字。 搜索是使用数据库的整理完成的,除非 search-string 或 source-string 定义为二进制字符串或 FOR BIT DATA ,在这种情况下,搜索是使用二进制比较完成的。
如果指定了可选的 start ,那么它指示要开始搜索的 source-string 中的字符位置。 如果指定了 start ,那么还可以指定实例号。 instance 自变量用于确定 search-string 在 source-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-string 或 source-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 单位度量)。
主变量 POSITION 的值设置为 26。SET :POSITION = LOCATE_IN_STRING('Jürgen lives on Hegelstraße', 'ß',-1,CODEUNITS32); - 示例 2: 查找字符串
WINNING
中字符N
第三次出现的位置,方法是从字符串的开头进行搜索,然后将主变量 POSITION 设置为字符串中字符的位置 (以字节计)。
主变量 POSITION 的值设置为 6。SET :POSITION = LOCATE_IN_STRING('WINNING','N',1,3,OCTETS);
