小编典典

高级MySQL按字母顺序排序的前缀?

sql

抱歉,如果您已经回答了这个问题,我已经进行了广泛的搜索,但没有找到答案(可能是因为我不确定其措词是否正确?)

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

例如,以下列表

University of Cambridge
University of Bristol
Durham University
kings College London

应该命令

University of Bristol
University of Cambridge
Durham University
Kings College London

阅读 240

收藏
2021-05-30

共1个答案

小编典典

您可以这样做:

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

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


示例视图,假设大学名称存储在列中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;

然后,您可以从Universities进行相同的选择list_universities,除了它将有一个额外的name_value列供您选择或排序。

请注意,这种方法(以及ORDER BY IF(...))将无法使用任何索引name来改善排序性能。

2021-05-30