使用 LIKE 字在 mySQL 中定义自定义 ORDER BY 顺序

Posted

技术标签:

【中文标题】使用 LIKE 字在 mySQL 中定义自定义 ORDER BY 顺序【英文标题】:Define a custom ORDER BY order in mySQL using the LIKE word 【发布时间】:2021-12-06 14:49:03 【问题描述】:

如何创建自定义订单,按NAME 对行进行排序,其中第一行的名称包含 Bob,然后是名称为 Alex 的行? 为了解释我的意思:如果 NAME = 'Bob' 和 NAME = 'Alex',我已经进行了以下查询以对结果进行排序:

SELECT * FROM table
ORDER BY CASE `NAME`
         WHEN 'Bob' THEN 1
         WHEN 'Alex' THEN 2
         ELSE 3
         END

但这仅在 NAME 完全等于 Bob 或 Alex 时才有效。我想修改它以排序名称中是否包含 Bob 或 Alex,基本上是 NAME LIKE '%Bob%'NAME LIKE '%Alex%'。我尝试了类似以下的方法,但它不起作用。

ORDER BY CASE `NAME`
         WHEN LIKE '%Bob%' THEN 1
         WHEN LIKE '%Alex%' THEN 2
         ELSE 3
         END

正确的语法是什么?

【问题讨论】:

你使用case作为一个简单的表达式,使用searched case表达式。 有效 SQL,但 mysql 不支持。 【参考方案1】:

使用CASE 的另一种形式,您可以在WHEN 中指定条件而不是值。

ORDER BY CASE
         WHEN NAME LIKE '%Bob%' THEN 1
         WHEN NAME LIKE '%Alex%' THEN 2
         ELSE 3
         END

【讨论】:

以上是关于使用 LIKE 字在 mySQL 中定义自定义 ORDER BY 顺序的主要内容,如果未能解决你的问题,请参考以下文章

带有 LIKE 的 Symfony Sonata SEO 自定义 sql 查询

怎样查看mysql自定义数据库的编码字符集

使用自定义 drawRect 代码创建 UIButton LIKE 控件

使用 javascript SDK 自定义皮肤 facebook like 按钮

EF Core 5 - 如何将 EF.Functions.Like 与映射到 JSON 字符串的自定义属性一起使用?

jpa使用自定义查询条件