在字符串中定位

LOCATE_IN_STRING 函数返回一个字符串 (称为 search-string) 在另一个字符串 (称为 source-string) 中的起始位置。 如果找不到 search-string 并且这两个参数都不为空,那么结果为零。 如果找到 search-string ,那么结果是从 1 到 source-string的实际长度的数字。 如果指定了可选的 start ,那么它指示 source-string 中要开始搜索的字符位置。

读取语法图跳过可视语法图LOCATE_IN_STRING(源字符串 ,搜索字符串 ,开始,实例 )

如果指定了可选的 start ,那么它指示 source-string 中要开始搜索的字符位置。 如果指定了 start ,那么还可以指定可选的 实例 编号。 instance 自变量用于确定 source-stringsearch-string 的特定出现。 每个唯一实例可以包含先前实例中的任何字符,但不能包含先前实例中的所有字符。

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

源字符串
用于指定要在其中执行搜索的源字符串的表达式。 source-string 可以是任何内置数字,日期时间,字符串, 开始更改或布尔值结束更改 表达式。 在对函数求值之前,会将数字,日期时间, 开始更改或布尔值结束更改 自变量强制转换为字符串。 有关将数字,日期时间, 开始更改和布尔值结束更改 转换为字符串的更多信息,请参阅 VARCHAR
搜索字符串
指定要搜索的字符串的表达式。 search-string 可以是任何内置数字,日期时间,字符串, 开始更改或布尔值结束更改 表达式。 它必须与 source-string兼容。 在对函数求值之前,会将数字,日期时间, 开始更改或布尔值结束更改 自变量强制转换为字符串。 有关将数字,日期时间, 开始更改和布尔值结束更改 转换为字符串的更多信息,请参阅 VARCHAR
启动
一个表达式,用于指定 source-string 中要启动搜索的位置。 start 可以是任何内置数字,字符串或图形字符串表达式。 如果该值不是 INTEGER 类型,那么在对该函数进行求值之前,会将其隐式强制转换为 INTEGER。

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

如果未指定 start ,那么该函数等效于:

  POSITION(  search-string , source-string )

如果 start 为零,那么将返回错误。

实例
一个表达式,用于指定要在 source-string中搜索的 search-string 实例。 表达式必须返回内置数字,字符串或图形字符串数据类型的值。 如果该值不是 INTEGER 类型,那么在对该函数进行求值之前,会将其隐式强制转换为 INTEGER。 如果未指定 instance ,那么缺省值为 1。 整数的值必须大于或等于 1。

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

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

如果任何自变量可以为空,那么结果可以为空; 如果任何自变量为空,那么结果为空值。

LOCATE_IN_STRING 函数以字符为基础运行。 因为 LOCATE_IN_STRING 以字符串为基础运行,所以任何移入和移出字符都不需要位于完全相同的位置,它们唯一的意义是指示哪些字符是 SBCS ,哪些字符是 DBCS。

如果 search-string 的 CCSID 与 source-string的 CCSID 不同, 它将转换为 source-string的 CCSID。

如果执行包含 LOCATE_IN_STRING 函数的语句且自变量为 SBCS 数据,混合数据或 Unicode 数据时,除 *HEX 以外的整理顺序生效,那么将通过比较集合中每个值的加权值来获取结果。 加权值基于整理顺序。 不能使用 LOCATE 函数指定 ICU 整理顺序表。

语法替代方法: INSTR 可用作 LOCATE_IN_STRING 的同义词。

示例

  • 通过从字符串末尾搜索,找到字符串 "J ü r g e n 生活在 H e g e l s t r a ß e" 中的字符 "ß" ,并使用字符串中的位置设置主变量 POSITION。
    SET :POSITION = LOCATE_IN_STRING('Jürgen lives on Hegelstraße','ß',-1);
    主变量 POSITION 的值设置为 26。
  • 通过从字符串开头进行搜索,查找字符串 "WINNING" 中出现的字符 "N" 的位置。
    SELECT LOCATE_IN_STRING('WINNING','N',1,3),     
           LOCATE_IN_STRING('WINNING','N',3,2),
           LOCATE_IN_STRING('WINNING','N',3,3)
    FROM SYSIBM.SYSDUMMY1;
    返回值:
    6     4     6  
  • 通过从字符串末尾搜索,查找字符串 "WINNING" 中出现的字符 "N" 的位置。
    SELECT LOCATE_IN_STRING('WINNING','N',-1,3), 
           LOCATE_IN_STRING('WINNING','N',-3,2), 
           LOCATE_IN_STRING('WINNING','N',-3,3)
    FROM SYSIBM.SYSDUMMY1;
    返回值:
    3     3     0