在字符串中定位
LOCATE_IN_STRING 函数返回一个字符串 (称为 search-string) 在另一个字符串 (称为 source-string) 中的起始位置。 如果找不到 search-string 并且这两个参数都不为空,那么结果为零。 如果找到 search-string ,那么结果是从 1 到 source-string的实际长度的数字。 如果指定了可选的 start ,那么它指示 source-string 中要开始搜索的字符位置。
如果指定了可选的 start ,那么它指示 source-string 中要开始搜索的字符位置。 如果指定了 start ,那么还可以指定可选的 实例 编号。 instance 自变量用于确定 source-string中 search-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。
主变量 POSITION 的值设置为 26。SET :POSITION = LOCATE_IN_STRING('Jürgen lives on Hegelstraße','ß',-1); - 通过从字符串开头进行搜索,查找字符串 "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
