简体   繁体   English

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

[英]SQL sort a column(varchar(255)) with numeric sort with alphanumeric data

I am using SQL server(MySQL Ver 14.14 Distrib 5.7.21, for Linux (x86_64)). 我正在使用SQL服务器(MySQL Ver 14.14 Distrib 5.7.21,Linux(x86_64))。 I want to sort data like this. 我想对这样的数据进行排序。

DocTyp-2649
DocTyp-2650
DocTyp-2651
DocTyp-2652
DocTyp-26036
DocTyp-26037
DocTyp-26038

my query is 我的疑问是

SELECT doc_unique_id FROM docs ORDER BY doc_unique_id ASC

my result is 我的结果是

DocTyp-26036
DocTyp-26037
DocTyp-26038
DocTyp-2649
DocTyp-2650
DocTyp-2651
DocTyp-2652

what can u do? 你能做什么?

Try this query 试试这个查询

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

You could explicitly sort the data by using substring() function (SQL Server) to get the numerical data 您可以使用substring()函数(SQL Server)显式排序数据以获取数值数据

select * 
from table 
ORDER BY 
cast(substring(doc_unique_id, charindex('-', doc_unique_id)+1, len(doc_unique_id)) as int)

尝试这个:

select doc_unique_id from docs ORDER BY CAST(SUBSTRING_INDEX(doc_unique_id, '-', -1) AS UNSIGNED) ASC;

ORDER BY长度(doc_unique_id),doc_unique_id ASC

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM