文章
姚 鑫 · 四月 11 阅读大约需 2 分钟

第109章 SQL函数 POSITION

第109章 SQL函数 POSITION

返回子字符串在字符串中的位置的字符串函数。

大纲

POSITION(substring IN string)

参数

  • substring - 要搜索的子字符串。
    它可以是列的名称、字符串字面值或另一个标量函数的结果,其中基础数据类型可以表示为任何字符类型(如CHARVARCHAR2)。
  • IN string - 要在其中搜索子字符串的字符串表达式。

POSITION返回INTEGER数据类型。

描述

POSITION返回字符串中子字符串的第一个位置。
位置以整数形式返回。
如果substring没有找到,则返回0(0)
如果传递给任何一个参数一个NULL值,POSITION将返回NULL

位置是区分大小写的。
使用其中一个大小写转换函数来定位字母或字符串的大写和小写实例。

POSITION, INSTR, CHARINDEX和$FIND

POSITIONINSTRCHARINDEX$FIND都将搜索字符串中指定的子字符串,并返回与第一个匹配项对应的整数位置。
CHARINDEXPOSITIONINSTR返回匹配子字符串的第一个字符的整数位置。
$FIND返回匹配子字符串结束后第一个字符的整数位置。
CHARINDEX$FINDINSTR支持指定子字符串搜索的起始点。
INSTR还支持从起始点指定子字符串出现。

下面的示例演示了这四个函数,指定了所有可选参数。
注意,在这些函数中,stringsubstring的位置不同:

SELECT POSITION('br' IN 'The broken brown briefcase') AS Position,
       CHARINDEX('br','The broken brown briefcase',6) AS Charindex,
       $FIND('The broken brown briefcase','br',6) AS Find,
       INSTR('The broken brown briefcase','br',6,2) AS Inst

5   12  14  18

示例

下面的例子返回11,因为“b”是字符串中的第11个字符:

SELECT POSITION('b' IN 'The quick brown fox') AS PosInt

11

下面的示例返回示例中每个名字的姓氏长度。
人表。
它定位用于将姓氏与name字段的其余部分分隔开的逗号,然后从该位置减去1:

SELECT Name,
POSITION(',' IN Name)-1 AS LNameLen
FROM Sample.Person

下面的示例返回样本中每个名称中字母“B”的第一个实例的位置。
人表。
因为POSITION是区分大小写的,所以在执行搜索之前使用%SQLUPPER函数将所有的名称值转换为大写。
因为%SQLUPPER在字符串的开头添加了一个空格,所以这个示例减去1以获得实际的字母位置。
没有找到指定字符串的搜索将返回0 (0);
在本例中,由于减法为1,这些搜索显示的值为-1:

SELECT Name,
POSITION('B' IN %SQLUPPER(Name))-1 AS BPos
FROM Sample.Person
0
0 29
讨论 (0)1
登录或注册以继续