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

带前缀的高级MySQL字母排序?,mysql,sql,database,Mysql,Sql,Database,道歉如果这个问题已经得到了回答,我已经做了广泛的搜索,但没有找到答案(可能是因为我不确定它的措辞是否恰当?) 是否可以使用设置的前缀按字母顺序进行排序?例如,我在表格中有一个大学列表。有些大学的前缀是 < 大学(例如剑桥大学),而其他大学则不是(例如杜伦大学)。是否可以为MySQL定义一个要忽略的前缀 例如,以下列表 University of Cambridge University of Bristol Durham University kings College London 应该被命

道歉如果这个问题已经得到了回答,我已经做了广泛的搜索,但没有找到答案(可能是因为我不确定它的措辞是否恰当?)

是否可以使用设置的前缀按字母顺序进行排序?例如,我在表格中有一个大学列表。有些大学的前缀是<代码> < <代码>大学(例如剑桥大学),而其他大学则不是(例如杜伦大学)。是否可以为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)
在该表上创建一个视图,将一个额外的
name\u值
列集投影到上面的
IF()
表达式,这可能是一个好主意。然后,您可以按此列排序并选择它,而不必使用
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;
然后,您可以从
大学
中进行选择,方法与从
大学列表
中进行选择相同,只是它会有一个额外的
名称(u值)
列,您可以选择该列,或按顺序排序,或其他任何方式

请注意,这种方法(以及按IF(…)排序)将无法使用
名称上的任何索引来提高排序性能。

您可以尝试

ORDER BY REPLACE(LOWER(fieldName), 'university of', '')
可能的方法之一

然而,应用函数改变列的值将导致被mysql忽略的索引
人们通常会考虑复制另一个专栏,
本专栏通常会删除那些不需要的单词
(或将值安排为可进行排序的方式)

假设干净字段命名为
订单名称

它应该包括

Bristol, University
Cambridge, University
Durham, University
Kings College Cambridge
Kings College London
因此,SQL可能是

select display_name 
from tables
order by order_name;

我将其放在SQL Management Studio中,因此我假设这是有效的MySql(例如,我避免使用“with”)


哇,伙计们,太快了,谢谢你们的回答,我会尝试你们的建议,很快会回复你们。谢谢你们给我介绍观点!我以前对他们一无所知。这是创建此特定视图的正确语法吗<代码>创建视图[大学]作为选择子字符串(名称,1,14)=“大学”,子字符串(名称,15),列表中的大学名称
您需要从名称中省略
[
]
字符。否则,是的——但请注意,这将创建一个只包含一列的视图。有关CREATE VIEW语句,请参见我的更新答案。
select display_name 
from tables
order by order_name;
SELECT UniversityName, REPLACE(UniversityName, 'University of', '') AS cleanName 
FROM Universities c
ORDER BY cleanName