我目前在db中有一个列,其中有几个范围存储为varchar,例如:
0-499
1000-1199
500-999
如何按如下方式对这些范围进行排序:
0-499
500-999
1000-1199
提前感谢
发布于 2018-06-05 03:51:05
如果你想变得棘手,你可以这样做:
order by cast(replace(col, '-', '.') as decimal(30, 15))
这会将连字符替换为小数点,将其转换为数字值,并将其用于排序。这在几乎任何数据库中都可以工作。
这并不完美,因为它并没有真正正确地按范围的第二个数字排序。但第一个数字需要完全匹配(出于某种原因,根据您的样本数据,这似乎不太可能)。
发布于 2018-06-05 03:49:26
按连字符前的字符排序,转换为整数。
发布于 2018-06-05 03:50:27
您可以在left()
函数中使用order by
子句:
order by cast(left(n, charindex('-', n)-1) as int);
但是,前面的order by
实例具有int会话,如果在连字符之前有十进制值,则使用decimal
https://stackoverflow.com/questions/50687771
复制相似问题