MySQL 查询按字母顺序 A-Z 但 "AA"之后是 "Z"

标签 mysql sql string

我在 MySQL 表中有数据,title 如下所示:

16A Activated Charcoal
16AA Lidocaine Viscous Gel (Xylocaine ®)
16B Adenosine ( Adenocard)
16BB Lorazepam (Ativan)
16C Albuterol (Proventil, Ventolin)
16CC Magnesium Sulfate
16D Amidarone Cordarone, Nexterone
16E Aspirin
16F  Atropine Sulfate
16G Calcium Chloride
[...]
16Z DuoDote Auto-Injector

我的应用程序使用此 SQL 查询来构建数据列表:

SELECT uid, file, title 
FROM library 
WHERE section = '$uid' AND enabled >0 
ORDER BY title ASC

这是可行的,除了 MySQL(正确地)将 16AA 紧跟在 16A(如上所列)之后。我想要的是列出所有 16A-16Z,然后是 16AA-16ZZ。因此按此顺序返回数据:

16A Activated Charcoal
16B Adenosine ( Adenocard)
16C Albuterol (Proventil, Ventolin)
[...]
16Z DuoDote Auto-Injector
16AA Lidocaine Viscous Gel (Xylocaine ®)
16BB Lorazepam (Ativan)
16CC Magnesium Sulfate

如果不向我的表中添加 sort 列,是否可以通过某种方式编写查询来对这些 A-Z、AA-ZZ 等进行排序?

我的想法:如果我计算空格在 title 中出现的位置,我可以按那个数字 ASC 排序,然后按第二优先级的标题 ASC 排序。这应该首先按字母顺序给出所有 3 位代码,然后按字母顺序给出所有 4 位代码,然后按字母顺序给出所有 5 位代码,对吗?

最佳答案

好吧,哎呀,我想我只是需要谈谈这个。解决方案很简单,使用 MySQL LOCATE() 找到空间,从而推断出代码的长度:

SELECT uid, file, title, 
LOCATE(' ', title) AS code_length 
FROM library 
WHERE section = '{$row['uid']}' AND enabled >0 
ORDER BY code_length ASC, title ASC

关于MySQL 查询按字母顺序 A-Z 但 "AA"之后是 "Z",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21189764/

相关文章:

mysql - 如何加密mysql数据库中的数据?

php - 从 mysql 数据库获取日期到 PHP 的下拉框中

php - 一下子真的很奇怪的错误。可以在查询中减去,但相乘会产生错误

从字符串转换日期和/或时间时 C# 转换失败

mysql - 如果日期不存在,则获取给定日期的最后一行

java - 此模式与输入 123456789.2.2.2 匹配,但不应匹配

c - 如何输入可变长度字符串并输出用户定义长度字符串?

MYSQL,我想对整列使用乘法运算符

sql - 数据建模帮助 - 我是否要添加另一个表、更改现有表的用法或其他什么?

c - 如何在 C 中转义 char* 字符串中的特殊字符