SQL POSITION 函数

摘要:在本教程中,您将学习如何使用 SQL POSITION 函数来查找子字符串在字符串中首次出现的位置。

SQL POSITION 函数简介 #

在 SQL 中,POSITION 函数返回一个整数,表示子字符串在字符串中首次出现的位置。

以下是 POSITION 函数的语法:

POSITION(substring IN string)Code language: SQL (Structured Query Language) (sql)

POSITION 接受两个参数:

  • substring:您要查找的字符序列。
  • string:您要在其中搜索子字符串的字符串。

POSITION 函数返回一个整数,表示子字符串首次出现的位置。该位置是一个基于 1 的索引,意味着字符串中的第一个字符位置为 1,依此类推。

如果子字符串不存在,POSITION 函数将返回 0。

基本的 SQL POSITION 示例 #

以下示例使用 POSITION 示例来查找字符串 "SQL" 在字符串 "SQL will, SQL will rock you!" 中首次出现的位置。

SELECT
  POSITION('SQL' IN 'SQL will, SQL will rock you!') AS sql_position;Code language: PHP (php)

输出

 sql_position
--------------
            1

以下示例返回零,因为输入字符串中不包含子字符串 “We”。

SELECT
  POSITION('We' IN 'SQL will, SQL will rock you!') AS result;Code language: PHP (php)

输出

 result
--------
      0

在员工姓名中查找子字符串的位置 #

我们将使用 HR 示例数据库中的 employees 表来演示 POSITION 函数。

SQL POSITION Function

以下查询使用 POSITION 函数来查找 first_name 列中包含字母 A 的员工及其位置。

SELECT
  first_name,
  POSITION('A' IN first_name) AS position_of_a
FROM
  employees
WHERE
  POSITION('A' IN first_name) > 0;Code language: SQL (Structured Query Language) (sql)

试一试

输出

 first_name | position_of_a
------------+---------------
 Alexander  |             1
 Alexander  |             1
 Adam       |             1
...Code language: SQL (Structured Query Language) (sql)

根据子字符串位置筛选行 #

以下语句使用 POSITION 函数来查找电子邮件地址以字母 J 开头的员工。

SELECT
  email
FROM
  employees
WHERE
  POSITION('j' IN email) = 1;Code language: SQL (Structured Query Language) (sql)

试一试

输出

               email
-----------------------------------
 [email protected]
 jose [email protected]
 [email protected]
 [email protected]
 [email protected]
 [email protected]
 [email protected]
 [email protected]Code language: SQL (Structured Query Language) (sql)

在此示例中,我们在 WHERE 子句中使用 POSITION 函数来筛选出 email 列中字母 j 是第一个字符的行。

将 POSITION 函数与 CASE 表达式结合使用 #

以下查询使用 POSITION 函数与 CASE 表达式来标记电话号码以 555 开头的员工。

SELECT
  phone_number,
  CASE
    WHEN POSITION('515' IN phone_number) > 0 THEN 'Starts with 515'
    ELSE 'Does not start with 515'
  END AS status
FROM
  employees;Code language: SQL (Structured Query Language) (sql)

试一试

输出

 phone_number  |         status
---------------+-------------------------
 515-123-4567  | Starts with 515
 515-123-4568  | Starts with 515
 515-123-4569  | Starts with 515
 590-423-4567  | Does not start with 515
 590-423-4568  | Does not start with 515
...Code language: SQL (Structured Query Language) (sql)

摘要 #

  • 使用 POSITION 函数返回子字符串在输入字符串中首次出现的位置(基于 1)。
  • 如果子字符串在输入字符串中不可用,POSITION 函数将返回零。

数据库 #

本教程是否有帮助?
© .