FIELD
更新时间:2025-10-16
描述
返回 <expr>
在参数列表中的位置(基于 1 的索引),常用于 ORDER BY
子句中实现自定义排序。如果 <expr>
不在参数列表中,或 <expr>
为 NULL
,则返回 0
。在自定义排序中,不在参数列表中的数据会被排到最前面,可通过 asc
或 desc
控制整体排序顺序;对于 NULL
值,可以使用 nulls first
或 nulls last
控制排序顺序。
语法
SQL
1FIELD(<expr>, <param> [, ...])
参数
参数 | 说明 |
---|---|
<expr> |
要搜索的值。 |
<param> |
用于比较的一系列值。 |
返回值
返回 <expr>
在 <param>
参数列表中的位置(基于 1 的索引)。如果 <expr>
不存在于参数列表中,或者 <expr>
为 NULL
,则返回 0
。
举例
SQL
1SELECT k1, k7 FROM baseall WHERE k1 IN (1,2,3) ORDER BY FIELD(k1,2,1,3);
Text
1+------+------------+
2| k1 | k7 |
3+------+------------+
4| 2 | wangyu14 |
5| 1 | wangjing04 |
6| 3 | yuanyuan06 |
7+------+------------+
SQL
1SELECT class_name FROM class_test ORDER BY FIELD(class_name, 'Suzi', 'Ben', 'Henry');
Text
1+------------+
2| class_name |
3+------------+
4| Suzi |
5| Suzi |
6| Ben |
7| Ben |
8| Henry |
9| Henry |
10+------------+
SQL
1SELECT class_name FROM class_test ORDER BY FIELD(class_name, 'Suzi', 'Ben', 'Henry') DESC;
Text
1+------------+
2| class_name |
3+------------+
4| Henry |
5| Henry |
6| Ben |
7| Ben |
8| Suzi |
9| Suzi |
10+------------+
SQL
1SELECT class_name FROM class_test ORDER BY FIELD(class_name, 'Suzi', 'Ben', 'Henry') NULLS FIRST;
Text
1+------------+
2| class_name |
3+------------+
4| NULL |
5| Suzi |
6| Suzi |
7| Ben |
8| Ben |
9| Henry |
10| Henry |
11+------------+