如何根据值B对sql中的列进行排序,其中字段中的值的格式为A-B-C。我w

问题描述:

我想排列列中的值在列中的格式为00000197-001-00001等的列中。如何根据值B对sql中的列进行排序,其中字段中的值的格式为A-B-C。我w

我试图与查询

select * from <table name> where <condition> order by column name.

值进行排序,直到00000197-099-001。但在此之后,我得到的值是00000197- -001在我的列表,而不是00000197- -001

结果我得到:

00000197-097-000001

00000197-098-000001

00000197- -000001

00000197- -000001

00000197- -000001

00000197-1001-000001

00000197-1002-000001

00000197-1003-000001

00000197-1004-000001

00000197- 1005-000001

00000197-1006-000001

00000197-1007-000001

00000197-1008-000001

00000197-1009-000001

00000197- -000001

00000197- -000001

00000197- -00 0001

00000197-1012-000001

预期结果:

00000197-097-000001

00000197-098-000001

00000197- -000001

00000197- -000001

00000197-101-000001

00000197- -000001

00000197- -000001

00000197-1001-000001

00000197-1002-000001

00000197-1003-000001

请建议解决方案。 很多预先感谢。

鉴于你的样本数据,你可以这样做:

order by len(column1), column1 

这个想法在任何数据库的工作,虽然长度功能可能length()而非len()

+0

感谢这对我完美的作品。 – Shan

试试这个

SELECT * 
    FROM MyTable1 
ORDER BY CAST(SUBSTRING(SUBSTRING(MyCol1, CHARINDEX('-', MyCol1, 0) + 1, 100), 0, CHARINDEX('-', substring(MyCol1, CHARINDEX('-', MyCol1, 0) + 1, 100), 0)) as int) 

这适用于以格式X-Y-Z任意长度的每个字符串。

+0

这并不能帮助我,我现在得到如下结果: 00000197-097-000001 00000197-098-000001 00000197 - ** ** 099 - 000001 00000197 - ** ** 1007 -000001 00000197 - ** 1003 ** - 000001 00000197 - ** 1009 ** - 000001 00000197 - ** 100 ** - 000001 00000197-1002-000001 00000197-1004-000001 00000197 -1008-000001 00000197-1001-000001 00000197-1005-000001 00000197-1000-000001 00000197-1006-000001 00000197-1016-000001 00000197-1018-000001 00000197-1010-000001 – Shan

+0

是的,我没有看到你的样本数据1000以上的数字。我已经更新了答案。 –

+0

这也不适用于我..我在这个查询中收到错误。 对于CAST我得到:CAST函数需要1个参数。 对于选择(靠近CAST):选择附近的语法不正确。 此外,我已经提供了列名称代替@MyCol,并且我得到无效的列名称错误。 同样在最后还有一个额外的右括号。 – Shan