我想使用某些列的一部分制作order by
内容。例如,列user
的某些记录如下所示
vip1,vip2,vip21,vip10,vip100
如果我执行order by user
,订单将是
vip1,vip10,vip100,vip2,vip21
那我怎样才能得到如下结果
vip1,vip2,vip10,vip21,vip100
感谢。
答案 0 :(得分:1)
什么是RDBMS?
对于SQL Server来获取数字排序而不是字典排序,它将类似于
ORDER BY CAST(RIGHT(col, LEN(col)-3) AS INT)
对于MySQL
ORDER BY CAST(RIGHT(col, LENGTH(col)-3) AS UNSIGNED)
但是,如果所有行都相同,为什么要存储vip
部分呢?
答案 1 :(得分:1)
您也可以用任何内容('')替换用户名('vip')并添加零,然后排序。没有更高效,更通用。
答案 2 :(得分:1)
“前缀”部分总是正好是3个字符吗?如果没有,这变得复杂。嗯,你可以用Postgres
order by regexp_matches(userid,"^[a-z]*")[1], substring(userid, regexp_matches(userid,"^[a-z]*")[1])::int
我认为这样可行,我没试过。无论如何,关键是,如果你有一些能做正则表达式的函数,你可以找到一个领先的alpha字符串,然后将剩下的东西剥掉并将其转换为int。
如果你真的在alpha字段中嵌入了一个数字,那么更好的选择是:不要这样做。如果这是两个不同的逻辑数据项,则将其设为两个字段。把田地放在一起比把它们分开要容易得多。