如何根据值 B 对 sql 中的列进行排序,其中字段中的值格式为 A-B-C。我
Posted
技术标签:
【中文标题】如何根据值 B 对 sql 中的列进行排序,其中字段中的值格式为 A-B-C。我【英文标题】:How to sort a column in sql based on value B where values in fields are in format A-B-C. I w 【发布时间】:2017-08-31 06:56:39 【问题描述】:我正在尝试对表中的列进行排序,其中列中的值采用00000197-001-00001
等格式。
我试过查询
select * from <table name> where <condition> order by column name.
值排序到00000197-099-001
。但在此之后,我得到的值是 00000197-1000-001 在我的列表中,而不是 00000197-100-001 em>。
我得到的结果:
00000197-097-000001
00000197-098-000001
00000197-099-000001
00000197-1000-000001
00000197-100-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-1010-000001
00000197-101-000001
00000197-1011-000001
00000197-1012-000001
预期结果:
00000197-097-000001
00000197-098-000001
00000197-099-000001
00000197-100-000001
00000197-101-000001
.
.
.
00000197-999-000001
00000197-1000-000001
00000197-1001-000001
00000197-1002-000001
00000197-1003-000001
.
.
.
请提出解决方案。 非常感谢。
【问题讨论】:
【参考方案1】:试试这个
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 格式的任意长度的每个字符串。
【讨论】:
这对我没有帮助,我现在得到的结果如下: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- 100000197-1000197-1000197-1000197-1000197-1000197-1000197-1000100197-1000100197-1000197-1000197-1000197-1000197-100000100197-1000197-1000197-1000197-1000197-100000100197-1016-000001 00000197-1018-000001 00000197-1018-00000100197-1018-00000100197-1018-00000100197-1018-00000197-10101800197-1010-00000197-1010-00000197-1010-00000197-1010-000001 是的,我没有在您的示例数据中看到超过 1000 的数字。我已经更新了答案。 这对我也不起作用。我在这个查询中遇到错误。对于 CAST,我得到: CAST 函数需要 1 个参数。对于 Select(CAST 附近):Select 附近的语法不正确。我还提供了列名来代替@MyCol,并且我收到了无效的列名错误。最后还有一个额外的右括号。 Thers 'as int' 在最后(我在中间有 @ char),现在试试【参考方案2】:根据您的示例数据,您可以:
order by len(column1), column1
这个想法适用于任何数据库,尽管长度函数可能是length()
而不是len()
。
【讨论】:
以上是关于如何根据值 B 对 sql 中的列进行排序,其中字段中的值格式为 A-B-C。我的主要内容,如果未能解决你的问题,请参考以下文章