oracle 对一个字段的数据做排序 :值的依次排序为.“思考”->“asd”->“三点“
通过在 ORDER BY
中使用 CASE
表达式来指定自定义顺序。示例 SQL 如下(假设表名为 your_table
,字段名为 your_column
):
SELECT *
FROM your_table
ORDER BYCASE your_columnWHEN '思考' THEN 1WHEN 'asd' THEN 2WHEN '三点' THEN 3ELSE 4END;
解释:
-
CASE your_column WHEN '思考' THEN 1 …
:给每个值分配一个排序序号 -
ELSE 4
:所有其它值排在最后 -
最终
ORDER BY
会按数字升序排序,所以顺序就是 “思考” → “asd” → “三点” → 其它
如果你的排序关键字要从 Java 代码里动态传入,但又不是来自用户输入(而是你自己业务里固定的值),你可以这样拼出 .last(...)
字符串——不会产生 SQL 注入风险,因为这些值都是你自己写死在代码里的。
// 假设这三个值在代码里 String first = "思考"; String second = "asd"; String third = "三点"; String lastSql = String.format("ORDER BY CASE prv WHEN '%s' THEN 1 WHEN '%s' THEN 2 WHEN '%s' THEN 3 ELSE 4 END",first, second, third ); List<Shareh> list = lambdaQuery().eq(Shareh::getSharehId, x.getId()).last(lastSql).list();
要点
-
.last(...)
会把整个字符串原样追加到 SQL 末尾 -
String.format(...)
把 Java 变量注入到 SQL 里 -
因为这些变量来自代码常量(非外部输入),所以不用担心注入漏洞