我在sql查询中使用 oder by name 以下是我表中的名称。
rama1
rama2
rama10
rama3
rama11
我使用查询显示名称按名称排序
输出就像,
rama1
rama10
rama11
rama2
rama3
但我需要输出,
rama1
rama2
rama3
rama10
rama11
请帮我查询以获得上述输出。
提前致谢
答案 0 :(得分:3)
我想你的桌子结构错了。您应该有一个单独的列,例如numeric数据类型的ID,您可以在其中保留rama数字部分。在这种情况下,您可以在不开发自行车的情况下进行此类查询。
在您的情况下,您可以从字符串中获取数字部分(请参阅How to get the numeric part from a string using T-SQL?获取ms sql)并按顺序排序。但这是错误的方式。
答案 1 :(得分: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
答案 2 :(得分:1)
查询:
SELECT t1.*
FROM Table1 t1
ORDER BY CAST(REPLACE(t1.col, 'rama', '') AS UNSIGNED) ASC
结果:
| COL |
----------
| rama1 |
| rama2 |
| rama3 |
| rama10 |
| rama11 |
答案 3 :(得分:1)
请尝试:
select *
From tbl
order by CAST(SUBSTRING(col, PATINDEX('%[0-9]%', col+'0'), 10) as int)