MySQL FIELD() 函数使用指南

MySQL FIELD() 函数返回一个指定的值在给定的列表中的索引。

FIELD() 语法

这里是 MySQL FIELD() 函数的语法:

FIELD(value, v1, v2, ..., vN)

参数说明

value
必须的。要在列表中查找的值。
v1, v2, ..., vN
必须的。被搜索的列表中的各个元素。

返回值

  • 如果在列表中找到指定的值,FIELD() 函数返回对应的位置索引。FIELD() 函数返回的索引的值从 1 开始。
  • 如果在列表中找不到指定的值,FIELD() 函数返回 0
  • 如果要查找的值为 NULLFIELD() 函数返回 0

FIELD() 示例

简单示例

  • 如果你需要知道 'A' 在列表 'A', 'B', 'C' 中的位置,可以使用如下语句:

    SELECT FIELD('A', 'A', 'B', 'C');
    
    +---------------------------+
    | FIELD('A', 'A', 'B', 'C') |
    +---------------------------+
    |                         1 |
    +---------------------------+

这里,'A', 'B', 'C' 组成了一个列表,而 'A' 位于第 1 位, 因此返回了 1

  • 如果在列表中找不到指定的值,FIELD() 函数返回 0

    SELECT FIELD('D', 'A', 'B', 'C');
    
    +---------------------------+
    | FIELD('D', 'A', 'B', 'C') |
    +---------------------------+
    |                         0 |
    +---------------------------+
  • 如果要查找的值为 NULLFIELD() 函数返回 0

    SELECT FIELD(NULL, 'A', 'B', NULL);
    
    +-----------------------------+
    | FIELD(NULL, 'A', 'B', NULL) |
    +-----------------------------+
    |                           0 |
    +-----------------------------+

使用 FIELD() 排序

某些情况下,你需要一个表中的数据按照有限的状态值进行排序,此时可以使用 FIELD() 函数。比如在一个电影表 film 中,电影的等级字段 rating 的值使用了 'G', 'PG', 'PG-13', 'R', 'NC-17' 列表中的值,如果您想按照列表中元素的顺序进行升序排序,请使用下面的语句:

SELECT *
FROM film
ORDER BY FIELD(rating, 'G', 'PG', 'PG-13', 'R', 'NC-17');

关于此案例的详细用法请移步到 MySQL ORDER BY 教程

FIELD()CASE...WHEN 语句

FIELD() 函数的功能可以使用 CASE...WHEN 实现,比如我们回到上面的语句:

SELECT FIELD('A', 'A', 'B', 'C') a_index;

可以改写为:

SELECT CASE 'A'
        WHEN 'A' THEN 1
        WHEN 'B' THEN 2
        WHEN 'C' THEN 3
       END a_index;

毫无疑问, FIELD() 函数是精简的,不易出错,并且更容易修改。