我在我的 sql 查询中按名称使用 oder 。
以下是我表中的名称。
rama1
rama2
rama10
rama3
rama11
我正在使用查询按名称显示名称顺序,
输出如下,
rama1
rama10
rama11
rama2
rama3
但我需要的输出应该是,
rama1
rama2
rama3
rama10
rama11
请帮助我查询以获取上述输出。
提前致谢
我在我的 sql 查询中按名称使用 oder 。
以下是我表中的名称。
rama1
rama2
rama10
rama3
rama11
我正在使用查询按名称显示名称顺序,
输出如下,
rama1
rama10
rama11
rama2
rama3
但我需要的输出应该是,
rama1
rama2
rama3
rama10
rama11
请帮助我查询以获取上述输出。
提前致谢
我想你的表结构有误。您应该有一个单独的列,例如数字数据类型的 ID,您可以在其中保留您的 rama 数字部分。在这种情况下,您无需开发自行车就可以进行此类查询。
在您的情况下,您可以从字符串中获取数字部分(请参阅如何使用 T-SQL 从字符串中获取数字部分?对于 ms sql)并按其排序。但这是错误的做法。
试试这个
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
询问:
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)