按一列对MySQL结果进行排序,并用句点分隔多个值

时间:2018-08-25 17:31:52

标签: mysql

我怀疑可能已经有人问过这个问题,但是我不确定如何用短语表达问题,以便SO搜索引擎将其收录。

我有一列TCID,其中包含以下格式的值:

1.A.1.1.1
4.A.1.1.1
2.B.1.1.10
2.B.1.1.2
...

此TCID中有5个单位,以句点分隔。我希望左侧的位置具有最高优先级,然后最后一位是最低优先级。

所以它会像这样:

1.A.1.1.1
2.B.1.1.2
2.B.1.1.10
4.A.1.1.1

这是我到目前为止的查询。几乎可以使用,但是最后一个位置没有得到排序。

SELECT * 
FROM system 
WHERE cluster = \"$tc_name\"
ORDER BY CAST(SUBSTR( SUBSTRING_INDEX(tcid,'.',1) , 1 ) AS UNSIGNED),
         SUBSTR( SUBSTRING_INDEX(tcid,'.',2) , LENGTH( SUBSTRING_INDEX(tcid,'.',1)) + 2 ),
         CAST(SUBSTR( SUBSTRING_INDEX(tcid,'.',3) , LENGTH( SUBSTRING_INDEX(tcid,'.',2)) + 2 ) AS UNSIGNED),
         CAST(SUBSTR( SUBSTRING_INDEX(tcid,'.',4) , LENGTH( SUBSTRING_INDEX(tcid,'.',3)) + 2 ) AS UNSIGNED)

有人可以帮我解决这个问题,或提出更好的方法吗?

2 个答案:

答案 0 :(得分:0)

显然,有更好的方法可以将该信息存储在数据库中,例如将值存储在单独的字段中。但是,并非总是可以更改代码库来执行此类操作。

但是我相信您只需要在查询中添加最终订单,即可使其按预期工作;

    System.out.println("What is the price of the product(e.g. 35.21)?");
    price = scanner.nextLine();
    price_2 = price.replaceAll("[^0-9]", "");
    price_3 = Double.parseDouble(price_2);
    System.out.println(price_3);

请查看此sqlfiddle进行检查

答案 1 :(得分:0)

只是为了好玩...

SELECT *
FROM
(
SELECT '1.A.1.1.1' x
UNION ALL
SELECT '4.A.1.1.1'
UNION ALL
SELECT '2.B.1.1.10'
UNION ALL
SELECT '2.B.1.1.2'
) a
ORDER BY
INET_ATON(CONCAT(MID(x,1,1),MID(x,4,1000)));