繁体   English   中英

通过数字对选定的SQL结果进行排序

[英]Order Selected SQL result by the Numbers

我有一个表,其中的“ varchar”类型列的大小为255个字符。 样本值如下所示

Test/16-17/1
Test/16-17/2
test/16-17/10
Test/16-17/11
Test/16-17/20
Test/16-17/22

但是,在“选择”中使用ORDER BY子句时,结果按以下顺序排列

Test/16-17/1
Test/16-17/10
Test/16-17/11
Test/16-17/2
Test/16-17/20
Test/16-17/22

如何在数值末尾按数值的时间顺序获得结果?

如果后跟相同的/且该列中有2位数字,则可以使用

order by right(vtest,2)
ORDER BY CONVERT( RIGHT( test_column_name,
  LENGTH(test_column_name) - LOCATE('/', REVERSE(test_column_name))
  ), UNSIGNED INTEGER);

要么

ORDER BY CONVERT(substring_index(id, '/', -1), UNSIGNED INTEGER);

对于您的特定示例,您可以按长度排序,然后按值排序:

order by length(vtest), vtest

我不知道这是否适用于其他不在问题中的行。

选择最后一个“ /”之后的结尾部分,然后将其乘以1即可将其转换为数字:

ORDER BY RIGHT(test_column, LENGTH(test_column) - LOCATE('/', REVERSE(test_column))) * 1;

要么

ORDER BY substring_index(id, '/', -1) * 1;

这基本上与Keyur Panchal的答案相同,但它使用隐式转换,它具有以下优点:1)易于读取/写入,2)您无需担心转换为类型,3)忽略字符,如果它们恰好存在于某些值中。

无论前10个字符是什么,它都将起作用:

ORDER BY CONCAT(LEFT(vtest, 10), CASE WHEN LENGTH(vtest) = 12 
                                      THEN CONCAT(0,RIGHT(vtest,1)) 
                                      ELSE RIGHT(vtest,2) END)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM