我想按照下面列出的顺序(数字1-12)对以下数据项进行排序:
1 2 3 4 5 6 7 8 9 10 11 12
但是,我的查询 - 首先使用order by xxxxx asc第一个数字排序:
1 10 11 12 2 3 4 5 6 7 8 9
有什么技巧让它更合适吗?
此外,为了充分披露,这可能是字母和数字的混合(虽然现在不是),例如:
A1 534G G46A 100B 100A 100JE
等等....
谢谢!
更新:人们要求查询
select * from table order by name asc
Run Code Online (Sandbox Code Playgroud) 我有排序/订单的问题,而不是像我需要的那样工作.
SELECT `proc` FROM `table` ORDER BY `proc` DESC;
Run Code Online (Sandbox Code Playgroud)
结果:
80.0 proc
70.0 proc
60.0 proc
50.0 proc
40.0 proc
200.0 proc
20.0 proc
190.0 proc
180.0 proc
170.0 proc
160.0 proc
150.0 proc
140.0 proc
130.0 proc
120.0 proc
110.0 proc
100.0 proc
Run Code Online (Sandbox Code Playgroud)
我需要的是:
200.0 proc
190.0 proc
180.0 proc
170.0 proc
160.0 proc
150.0 proc
140.0 proc
130.0 proc
120.0 proc
110.0 proc
100.0 proc
90.0 proc
80.0 proc
70.0 proc
60.0 proc
50.0 proc
40.0 proc
20.0 …Run Code Online (Sandbox Code Playgroud) 我有字符串如M1 M3 M4 M14 M30 M40等(字母后面的任何int 2-3位数)当我执行"ORDER BY name"时,它返回:
M1, M14, M3, M30, M4, M40
当我想要:
M1, M3, M4, M14, M30, M40
它将整个事物视为字符串,但我想将其视为字符串+ int
有任何想法吗?
有没有人知道使用PHP中的usort函数对对象执行自然顺序排序的功能是什么.
让我们说对象($ obj-> Rate)有一系列的值
$obj->10
$obj->1
$obj->2
$obj->20
$obj->22
Run Code Online (Sandbox Code Playgroud)
我试图让sort函数返回是什么?
$obj->22
$obj->20
$obj->10
$obj->2
$obj->1
Run Code Online (Sandbox Code Playgroud)
作为我目前的标准排序功能
function MySort($a, $b)
{
if ($a->Rate == $b->Rate)
{
return 0;
}
return ($a->Rate < $b->Rate) ? -1 : 1;
}
Run Code Online (Sandbox Code Playgroud)
正在回归
$obj->1
$obj->10
$obj->2
$obj->20
$obj->22
Run Code Online (Sandbox Code Playgroud) 我有一个名为Number这个数据填充的列(列是nchar):
1
2
1091
3
20
2B
Run Code Online (Sandbox Code Playgroud)
我想要一个给出这个顺序的select语句:
1
2
2B
3
20
1091
Run Code Online (Sandbox Code Playgroud)
我怎么能做到这一点?谢谢大家的帮助
(编者)
我遇到了一些我不确定如何处理的事情。我正在构建一个数据库来存储关于运动卡的信息,当我想查看某些卡片时,我在排序时遇到了一些问题。
作为背景,每张卡片(数据库中的行)都有关于年份的信息,设置卡片来自,卡片上的玩家和卡片号码(还有更多的信息,但这就是所有相关的信息)。当我看到结果时,我希望按年份排序,然后是设置,然后是玩家,然后是卡号。除了卡号之外的所有东西都工作正常,因为年份只是一个整数,并且 set 和 player 都是 varchars,所以很容易对它们进行排序。但是,卡号是我遇到的一些问题。
卡号列是一个 varchar,因为卡号可以包括字母、数字和破折号。最常见的卡号是直数(即 1、2、3、4、5)、直字母(Ex-A、Ex-B、Ex-C)、数字后跟字母(1a、1b , 2, 3a, 3b, 3c),或后跟数字的字母(A1、A2、A3、A4、A5)。这是我目前设置 SQL 字符串的排序部分的方式:
order by year desc, cardset asc, subset asc, cast(cardNum as unsigned) asc;
Run Code Online (Sandbox Code Playgroud)
这可以很好地处理大多数事情。但是我遇到的问题是,当一组卡的卡号中有相同的字母,然后有一个数字时。我希望排序基本上忽略前导字母,然后按数字排序。但是,有时它不会正确执行此操作,特别是当有超过 5 张卡片需要排序时。
具体来说,它错误地将具有以下卡号的某些卡按以下顺序排序:
什么时候应该导致:
它目前正在对直数或后跟字母的数字进行正确排序(即 1、2、3、4、5 或 1、2、3a、3b、4、5a、5b)。我不知道它不正确地对直字母进行排序有任何问题,但我目前也有很少的测试用例,所以我不确定它是否是 100%。
除了不知道如何在不弄乱其他排序的情况下修改我的 SQL 排序语句之外,我真的不知道它是如何得出上面 BCP 示例的顺序的。关于如何纠正它的任何想法?我想尝试忽略卡号中的字母,直到我们得到数字,但这会导致卡号中只有字母的卡出现重大问题。所以我有点卡住了。
绝对最坏最坏,我可能会将卡号列分成 2 个不同的列,一个用于更具描述性的部分,另一个用于我想要排序的部分。这可能最终会正常工作,但需要大量工作才能恢复正常!
编辑 - 这里有一些更多信息,包括我的数据库中的数据(抱歉格式化,不知道如何在此处制作表格):
| year | cardSet | subset | cardNum |
| 2016 | Bowman | | 52 |
| 2016 | Bowman | …Run Code Online (Sandbox Code Playgroud) 我有一列名称为标题的行:
我需要这样排序
有什么办法吗?(列类型为 varchar)
在数据库中,它存储A1,A2,A10,A12,A5,A8的值,但当我检索它时,它显示如下: -
A1,A10,A12,A2,A5,A8
有没有办法正确排序?喜欢
A1,A2,A5,A8,A10,A12