MySQL中的排序涉及到字符集和排序规则。默认情况下,MySQL按照ASCII码对字符进行排序,数字>字母>中文。但是,特殊字符(非字母、数字、中文)的排序需要一些额外处理。
试过SUBSTRING、LEFT等,都不能完美实现多中文的首字母排序
以下是实现不同类型字符排序的示例:
- 单字符匹配实现:
SELECT name,
(CASE WHEN HEX(name) REGEXP '[46][1-9]|[357][0-9]|[46][a-f]|[57]a|e[4-9][0-9a-f]{4}'
THEN 0
ELSE 1
END) AS sort
FROM user
ORDER BY sort, CONVERT(name USING bgk);
匹配到非字母数字中文的内容,做排序,字母数字中文为null,排序优先级最高,排在上面。
为什么用HEX()函数做十六进制编码?因为中文用常规的正则不能匹配到结果。
为什么要把字母数字中文放在一起匹配?因为处理复杂度会更高。文章来源:https://www.toymoban.com/news/detail-831606.html
- 多字符串实现:
将name字段拆分为10个单字符,然后逐字进行匹配。
修改正则表达式,匹配多个字符:
SELECT name,
(CASE WHEN HEX(name) REGEXP '^[46][1-9]|[357][0-9]|[46][a-f]|[57]a|e[4-9][0-9a-f]{4}+'
THEN 0
ELSE 1
END) AS sort
FROM user
ORDER BY sort, CONVERT(name USING bgk);
这样可以处理更复杂的排序需求。文章来源地址https://www.toymoban.com/news/detail-831606.html
到了这里,关于mysql中文首字母排序查询的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!