0

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

rama1  
rama2  
rama10    
rama3  
rama11

我正在使用查询按名称显示名称顺序,
输出如下,

rama1  
rama10  
rama11  
rama2  
rama3

但我需要的输出应该是,

rama1  
rama2  
rama3  
rama10  
rama11  

请帮助我查询以获取上述输出。

提前致谢

4

4 回答 4

3

我想你的表结构有误。您应该有一个单独的列,例如数字数据类型的 ID,您可以在其中保留您的 rama 数字部分。在这种情况下,您无需开发自行车就可以进行此类查询。

在您的情况下,您可以从字符串中获取数字部分(请参阅如何使用 T-SQL 从字符串中获取数字部分?对于 ms sql)并按其排序。但这是错误的做法。

于 2013-07-04T06:46:25.513 回答
2

试试这个

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   

演示

于 2013-07-04T06:51:09.997 回答
1

询问:

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

结果:

|    COL |
----------
|  rama1 |
|  rama2 |
|  rama3 |
| rama10 |
| rama11 |
于 2013-07-04T06:47:10.227 回答
1

请试试:

select *
From tbl
order by CAST(SUBSTRING(col, PATINDEX('%[0-9]%', col+'0'), 10) as int)
于 2013-07-04T06:49:46.863 回答