如果这个问题已经得到回答,我深表歉意,我已经进行了广泛的搜索,但还没有找到答案(可能是因为我不确定它的措辞是否正确?)
是否可以按字母顺序 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/