mysql - 带前缀的高级 MySQL 字母排序?

标签 mysql sql database

如果这个问题已经得到回答,我深表歉意,我已经进行了广泛的搜索,但还没有找到答案(可能是因为我不确定它的措辞是否正确?)

是否可以按字母顺序 sort_by 设置前缀?例如,我在表格中有一个大学列表。有些大学以 University of 为前缀(例如 University of Cambridge),而其他大学则没有(例如 Durham University)。是否可以为 MySQL 定义一个忽略的前缀?

例如下面的列表

University of Cambridge
University of Bristol
Durham University
kings College London

应该命令

University of Bristol
University of Cambridge
Durham University
Kings College London

最佳答案

你可以这样做:

ORDER BY IF(SUBSTRING(name, 1, 14) = 'University of ', SUBSTRING(name, 15), name)

在这个表上创建一个 View 可能是个好主意,投影一个额外的 name_value 列设置为上面的 IF() 表达式。然后您可以按此列排序并选择它,而不必使用 IF() 污染您的查询。


示例 View ,假设大学名称存储在 name 列中:

CREATE VIEW Universities AS
    SELECT
        list_universities.*,
        IF(SUBSTRING(name, 1, 14) = 'University of ',
           SUBSTRING(name, 15),
           name) AS name_value
    FROM list_universities;

然后您可以像从 list_universities 中一样从 Universities 中进行选择,除了它会有一个额外的 name_value 列供您选择, or order by, 等等。

请注意,此方法(以及 ORDER BY IF(...))将无法使用 name 上的任何索引来提高性能那种。

关于mysql - 带前缀的高级 MySQL 字母排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7176086/

相关文章:

mysql - 如何对新数据进行排序显示?

mysql - 类型错误 : Cannot read property 'findOne' of undefined while using sequelize in node

java - 轻松生成休息服务的解决方案?

c++ - 如何使用 SOCI 库将变量绑定(bind)到准备好的语句?

java - jdbc connectTimeout 与 jdbc loginTimeout

两个子表的 MySQL JOIN 问题

sql - 如何在Oracle 10g中执行 "selective where"?

sql - 重命名所有列名以在大查询中加入

mysql - 对于 View 中的每个人?

database - 如何在 UML 中标记数据库组件?