Access 2013 - 将不规则长度的字符串排序为oder

时间:2017-07-13 13:09:32

标签: mysql string sorting

我正在尝试使用hexa数字对一些字符串进行排序,我的问题是它们对于我在Access中的知识不规则而且很难,所以我真的可以使用一些帮助!

每个文件"Files"都有一个REQUEST字符串,其中包含相应的RESPONSE字符串,它们在前4个字符"16xx"上相似,且始终为8-9个字符{ {1}}有时会在更多地方和字符5-6中"xx"添加到RESPONSE +40。我从我的表中取了一些例子(真正的表是600行,包含24个不同文件的不同字符串)

ex 19 -> 59ID = pimekeyFiles = file where string came formNr = what nr the string had in fileString = the string I would like to sort

enter image description here

我想在像这样的新查询中成对它们...... enter image description here

...以便TYPE = if it was a REQUEST or RESPONSE之前使用Files REQUESTRESPONSE的形式对它们进行异议。

我已经尝试过整天做出不同的查询来解决这个问题,但无法正确理解语法。尝试使用SQL leftiifmidlen函数进行排序,更新查询,但我得到语法错误,没有或错误的值...是否有这样做的方式还是不规则甚至排序?

谢谢

EDIT 从一个文件现在看起来如何:

ID  Files   Nr  String                          Type
1   1       1   1636 19 02 2F                   REQUEST
2   2       2   1637 19 02 2F                   REQUEST
3   2       3   1631 19 02 2F                   REQUEST
4   3       4   1637 19 04 0A 1B 47 FF          REQUEST
28  1       10  1636 59 02 FF                   RESPONSE
29  2       11  1637 59 02 FF                   RESPONSE
30  2       12  1631 59 02 7F C1 00 00 28 C2 A4 RESPONSE
31  3       13  1637 59 04 0A 1B 47 00          RESPONSE

我希望如何:

ID  Files   Nr  String                          Type
1   1       1   1636 19 02 2F                   REQUEST
28  1       10  1636 59 02 FF                   RESPONSE
2   2       2   1637 19 02 2F                   REQUEST
29  2       11  1637 59 02 FF                   RESPONSE
3   2       3   1631 19 02 2F                   REQUEST
30  2       12  1631 59 02 7F C1 00 00 28 C2 A4 RESPONSE
4   3       4   1637 19 04 0A 1B 47 FF          REQUEST
31  3       13  1637 59 04 0A 1B 47 00          RESPONSE

2 个答案:

答案 0 :(得分:1)

您可以尝试这样的事情(MYSQL)。它使用用户定义的变量来生成"订购领域。我想FIL是表的名称:

SELECT ID, FILES, NR, STRING, TYPE
FROM (
    SELECT * 
    , @o:= CASE WHEN TYPE='REQUEST' THEN @o+2 ELSE 0 END ord
    , @p:= CASE WHEN TYPE= 'RESPONSE' THEN @p+2 ELSE 0 END ord2
    , @o+@p AS ord_tot
    FROM FIL A
     CROSS JOIN (SELECT @o:=-1,@p:=2 ) T1
    ORDER BY TYPE, FILES, NR
   ) B
ORDER BY ord_tot;

输出:

ID  FILES   NR  STRING  TYPE
1   1   1   1636 19 02 2F   REQUEST
28  1   10  1636 59 02 FF   RESPONSE
2   2   2   1637 19 02 2F   REQUEST
29  2   11  1637 59 02 FF   RESPONSE
3   2   3   1631 19 02 2F   REQUEST
30  2   12  1631 59 02 7F C1 00 00 28 C2 A4 RESPONSE
4   3   4   1637 19 04 0A 1B 47 FF  REQUEST
31  3   13  1637 59 04 0A 1B 47 00  RESPONSE

答案 1 :(得分:0)

实现此目的的最简单方法是使用this one,然后在正确的字段上使用ORDER BY。这当然是假设您可以修改数据的存储方式以符合所描述的十六进制格式。