sql Order by查询以按顺序显示名称

sql Order by查询以按顺序显示名称,sql,Sql,我在sql查询中使用的是按名称排序。 以下是我表格中的名称 rama1 rama2 rama10 rama3 rama11 我正在使用查询按名称显示名称订单 结果是 rama1 rama10 rama11 rama2 rama3 但我需要输出应该是 rama1 rama2 rama3 rama10 rama11 请帮助我查询以获得上述输出 提前谢谢我想您的桌子结构有误。您应该有一个单独的列,比如numeric数据类型的ID,您可以在其

我在sql查询中使用的是按名称排序。
以下是我表格中的名称

rama1  
rama2  
rama10    
rama3  
rama11
我正在使用查询按名称显示名称订单
结果是

rama1  
rama10  
rama11  
rama2  
rama3
但我需要输出应该是

rama1  
rama2  
rama3  
rama10  
rama11  
请帮助我查询以获得上述输出


提前谢谢

我想您的桌子结构有误。您应该有一个单独的列,比如numeric数据类型的ID,您可以在其中保存您的rama numeric部分。在这种情况下,您可以在不开发bycicle的情况下进行此类查询

在您的例子中,您可以从字符串中获取数字部分(请参见ms sql)并按其排序。但这是错误的做法。

查询:

SELECT t1.*
FROM Table1 t1
ORDER BY CAST(REPLACE(t1.col, 'rama', '') AS UNSIGNED) ASC
结果:

|    COL |
----------
|  rama1 |
|  rama2 |
|  rama3 |
| rama10 |
| rama11 |
请尝试:

select *
From tbl
order by CAST(SUBSTRING(col, PATINDEX('%[0-9]%', col+'0'), 10) as int)
试试这个

SELECT col FROM Table1
ORDER BY 
CASE WHEN PatIndex('%[0-9]%',col) > 0
      THEN RIGHT(col,LEN(col)- (PatIndex('%[0-9]%',col)-1)) * 1
      ELSE col END   

您使用的是什么RDBMS?所有记录中是否都有“rama”一词?所有的记录都以数字结尾,你必须按顺序吗?@voo..是的..ram在我表格的所有行中,它以数字结尾,这有关系吗?他的问题是,当按字母顺序排序时,10排在3之前,因为1排在3之前。如果DBS不支持这种排序,我认为您可能需要“手动”进行排序procedure@billdoor是的,这很重要,因为在这种情况下,他可以选择这个移除的“rama”部分,然后将其转换为数字并进行适当的排序。这种排序在大多数RDBMS中用于字符串数据类型。告诉我DBS支持什么样的字符串排序?回答+1,介绍
数据.stackexchange
时+n(如果可以的话)。很好:)