我怀疑可能已经有人问过这个问题,但是我不确定如何用短语表达问题,以便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)
有人可以帮我解决这个问题,或提出更好的方法吗?
答案 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)));