首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >varchar范围的order子句

varchar范围的order子句
EN

Stack Overflow用户
提问于 2018-06-05 03:46:31
回答 5查看 41关注 0票数 0

我目前在db中有一个列,其中有几个范围存储为varchar,例如:

代码语言:javascript
复制
0-499
1000-1199
500-999

如何按如下方式对这些范围进行排序:

代码语言:javascript
复制
0-499
500-999
1000-1199

提前感谢

EN

回答 5

Stack Overflow用户

发布于 2018-06-05 03:51:05

如果你想变得棘手,你可以这样做:

代码语言:javascript
复制
order by cast(replace(col, '-', '.') as decimal(30, 15))

这会将连字符替换为小数点,将其转换为数字值,并将其用于排序。这在几乎任何数据库中都可以工作。

这并不完美,因为它并没有真正正确地按范围的第二个数字排序。但第一个数字需要完全匹配(出于某种原因,根据您的样本数据,这似乎不太可能)。

票数 3
EN

Stack Overflow用户

发布于 2018-06-05 03:49:26

按连字符前的字符排序,转换为整数。

票数 0
EN

Stack Overflow用户

发布于 2018-06-05 03:50:27

您可以在left()函数中使用order by子句:

代码语言:javascript
复制
order by cast(left(n, charindex('-', n)-1) as int); 

但是,前面的order by实例具有int会话,如果在连字符之前有十进制值,则使用decimal

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50687771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档