SQL - Order by with alphanumeric characters

一个人想着一个人 提交于 2019-12-19 09:22:02

问题


I have the following table:

create table #tbl
(
 product_id nvarchar(50)
)

insert into #tbl values ('011014-A11')
insert into #tbl values ('011014-A10')
insert into #tbl values ('011014')
insert into #tbl values ('011014-A1')
insert into #tbl values ('011014-A2')

I want to order the Product IDs like this (from the smallest to the greatest):

011014
011014-A1
011014-A2
011014-A10
011014-A11

This is what I tried, but it is not working:

select product_id
from #tbl
order by product_id desc

How do I do this?

And how do I get just the greatest product_id? I tried this, but it didn't work:

select top 1 product_id
from #tbl
order by product_id desc

回答1:


Try following query to get the results in your expected order.

Fiddle demo

Select product_id
From tbl              --Please change table name to #tbl in your actual query
Order by len(product_id), product_id



回答2:


You have already accepted Kaf's answer, and it may work well for you, but it will only work as long as the first 8 characters are the same. For example if you added a value of 011014-B1 then your results would be:

011014
011014-A1
011014-A2
011014-B1
011014-A10
011014-A11

If your pattern is consistent (sort by the first8 chars then by the "number" after them, this may work better for you:

Select product_id
From #tbl              
Order by LEFT(product_id,8), CAST(SUBSTRING(product_id,9,9) AS INT) 


来源:https://stackoverflow.com/questions/21048295/sql-order-by-with-alphanumeric-characters

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!