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。
如果要查找的值为 NULL,FIELD() 函数返回 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() 函数返回一个指定的值在给定的列表中的位置索引。