我有一个包含这样数据的专栏:
COMPRESSIN 1(PB4),
COMPRESSIN 12(PB4),
COMPRESSIN 3(PB4).
我想通过COMPRESSION订购列。所以分别为1,3和12,如下图所示:
COMPRESSION 1(PB4),
COMPRESSION 3(PB4),
COMPRESSION 12(PB4).
答案 0 :(得分:0)
您需要通过子字符串进行排序。
...
order by
substring(yourColumn,12,99)
这基本上对'COMPRESSION '
之后的所有内容进行排序。重要的是要知道这仍然是基于使用unicode十进制值的varchar
顺序进行排序。因此,由于它的区分大小等,b出现在A之前......
如果您的列都以(XXX)模式结束,您可以使用它来规避这一点。
order by
left(substring(yourColumn,12,99),len(substring(yourColumn,12,99)) - 5)
答案 1 :(得分:0)
另一种方法是在订购时删除非数字部分:
ORDER BY CAST(
REPLACE(
REPLACE(YourColumn, 'COMPRESSION ','')
, '(PB4)','')
AS int) ASC
答案 2 :(得分:0)
这是一个潜在的解决方案,或者至少有一个可以帮助您找到正确方向的解决方案。我建议您考虑问题的清晰度并添加更多细节。
SELECT
ColumnName
FROM
TableName
ORDER BY
CAST(SUBSTRING(ColumnName, CHARINDEX(' ', ColumnName) + 1, CHARINDEX('(', ColumnName) - CHARINDEX(' ', ColumnName) - 1) AS int)
这可以通过使用CHARINDEX来查找压缩后的空间作为起始位置(在空格后开始+1),并使用左括号作为结束位置来隔离数字值以进行排序。您还需要将此值转换为某种类型的数值,如整数。