MySQL FIELD() 函数使用指南
MySQL FIELD()
函数返回一个指定的值在给定的列表中的索引。
FIELD()
语法
这里是 MySQL FIELD()
函数的语法:
FIELD(value, v1, v2, ..., vN)
参数说明
value
- 必须的。要在列表中查找的值。
v1, v2, ..., vN
- 必须的。被搜索的列表中的各个元素。
返回值
- 如果在列表中找到指定的值,
FIELD()
函数返回对应的位置索引。FIELD()
函数返回的索引的值从1
开始。 - 如果在列表中找不到指定的值,
FIELD()
函数返回0
。 - 如果要查找的值为
NULL
,FIELD()
函数返回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 | +---------------------------+
-
如果要查找的值为
NULL
,FIELD()
函数返回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()
函数是精简的,不易出错,并且更容易修改。