2013-07-04 104 views
0

我在我的SQL查询中使用或名称
以下是我的表中的名称。SQL按查询顺序显示名称

rama1 
rama2 
rama10  
rama3 
rama11 

我使用的查询按名称显示的名称为了
输出来像,

rama1 
rama10 
rama11 
rama2 
rama3 

但我需要的输出应该是,

rama1 
rama2 
rama3 
rama10 
rama11 

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

在此先感谢

+0

您使用的是什么RDBMS? – peterm

+1

你是否在所有记录中都有“rama”字样?所有记录是否都以数字结尾,您必须按顺序? – Alex

+0

@ voo..yes..ram在我的表格中的所有行中都有,并以数字 – bhai

回答

1

查询:

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

结果:

| COL | 
---------- 
| rama1 | 
| rama2 | 
| rama3 | 
| rama10 | 
| rama11 | 
+0

@ Justin ..感谢您的大力帮助..它的工作非常完美。 – bhai

+0

+ +1(如果可以的话)引入'data.stackexchange'。这真好 :) – exexzian

3

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

在你的情况下,你可以从你的字符串中获取数字部分(参见ms sql的How to get the numeric part from a string using T-SQL?)并按顺序排列。但这是错误的路要走。

1

请尝试:

select * 
From tbl 
order by CAST(SUBSTRING(col, PATINDEX('%[0-9]%', col+'0'), 10) as int) 
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 

DEMO