Mysql SQL使用字母数字数据进行数字排序对列(varchar(255))进行排序

Mysql SQL使用字母数字数据进行数字排序对列(varchar(255))进行排序,mysql,sql,sorting,Mysql,Sql,Sorting,我使用的是SQL server(MySQL版本14.14发行版5.7.21,适用于Linux(x86_64))。我想像这样对数据进行排序 DocTyp-2649 DocTyp-2650 DocTyp-2651 DocTyp-2652 DocTyp-26036 DocTyp-26037 DocTyp-26038 我的问题是 SELECT doc_unique_id FROM docs ORDER BY doc_unique_id ASC 我的结果是 DocTyp-26036 DocTyp-26

我使用的是SQL server(MySQL版本14.14发行版5.7.21,适用于Linux(x86_64))。我想像这样对数据进行排序

DocTyp-2649
DocTyp-2650
DocTyp-2651
DocTyp-2652
DocTyp-26036
DocTyp-26037
DocTyp-26038
我的问题是

SELECT doc_unique_id FROM docs ORDER BY doc_unique_id ASC
我的结果是

DocTyp-26036
DocTyp-26037
DocTyp-26038
DocTyp-2649
DocTyp-2650
DocTyp-2651
DocTyp-2652
你能做什么?

试试这个查询

SELECT doc_unique_id 
FROM docs 
ORDER BY cast(replace(doc_unique_id, 'DocTyp-', '') as int)

您可以通过使用
substring()
函数(SQL Server)对数据进行显式排序,以获取数字数据

select * 
from table 
ORDER BY 
cast(substring(doc_unique_id, charindex('-', doc_unique_id)+1, len(doc_unique_id)) as int)
按长度排序(doc_unique_id),doc_unique_id ASC

尝试以下操作:


从docs ORDER BY CAST中选择doc_unique_id(子字符串索引(doc_unique_id,'-',-1)作为未签名)ASC

前缀不相同始终DocTyp使用子字符串将列拆分为两部分,并按第一部分、长度(第二部分)、第二部分排序。当第二部分不总是数字时,这可以避免类型转换错误错误代码:1305 FUNCTION test.len不存在当您使用MySQL时,您可以尝试使用LENGTH而不是len?