MariaDB FIELD() 函数使用指南

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

MariaDB FIELD() 语法

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

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

参数说明

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

如果您未提供参数或提供了一个 1 个参数, MariaDB 将报告错误:ERROR 1582 (42000): Incorrect parameter count in the call to native function ‘FIELD’。

返回值

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

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

如果要查找的值为 NULLFIELD() 函数返回 0

MariaDB FIELD() 示例

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

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

输出:

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

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

MariaDB FIELD() 不区分大小写,如下:

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

输出:

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

MariaDB FIELD() 可以搜索数值的位置索引,如下:

SELECT FIELD(1, 2, 3, 1);

输出:

+-------------------+
| FIELD(1, 2, 3, 1) |
+-------------------+
|                 3 |
+-------------------+

使用 FIELD() 排序

您可能需要根据某一个列表中的值的顺序进行排序,比如您需要根据颜色列表 Green, Red, Blue 进行排序,您可以使用 FIELD() 函数。

下面的语句模拟了您的需求:

SELECT *
FROM product
ORDER BY FIELD(color, 'Green', 'Red', 'Blue');

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() 函数是精简的,不易出错,并且更容易修改。

结论

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