抱歉,如果您已经回答了这个问题,我已经进行了广泛的搜索,但没有找到答案(可能是因为我不确定其措词是否正确?)
是否可以sort_by设置前缀的字母顺序?例如,我在一个表中有一个大学列表。一些大学以University of(例如剑桥大学)为前缀,而其他大学则以(例如达勒姆大学)为前缀。可以为MySQL定义一个忽略的前缀吗?
sort_by
University of
例如,以下列表
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)
在此表上创建一个视图,name_value向IF()上面的表达式投射一个额外的列,这可能是一个好主意。然后,您可以按此列排序并选择它,而不必使用来污染您的查询IF()。
name_value
IF()
示例视图,假设大学名称存储在列中name:
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列供您选择或排序。
Universities
list_universities
请注意,这种方法(以及ORDER BY IF(...))将无法使用任何索引name来改善排序性能。
ORDER BY IF(...)