SQLite按字符串中的最后字符排序行

时间:2015-07-09 00:54:33

标签: sql database sqlite

我正在为我的Java应用程序使用sqlite数据库,并且我有一个varchar列,其中包含由我的Java程序编写,读取和解析的一堆用户统计信息。我想要做的是有一个查询,可以按列中的最后一个stat对行进行排序。统计数据以逗号分隔,它们的长度各不相同,所以我需要一些可以占用文本的最后一部分(这是从最后一个逗号到数据末尾的文本)并按顺序排序。这在我的Java应用程序中很容易做,但是资源密集程度更高,这就是为什么我想直接用查询来做这个。实际上,实际的列数据看起来像这样:

2015/7/4 17:24:38,[(data1, 1, 1436394735787)|(data2, 4, 1436394739288)], 5

我正在尝试根据最后5或其他任何可能的行来排序行(它也可以是多个数字)。我尝试了几乎所有我能在互联网上找到的东西,但是很多问题,如果因为语法错误(即使我完全复制了查询)或者某些特定功能不存在而且我不确定的问题这些错误的原因是什么。我对MySQL并不熟悉,所以最简单的答案是最受欢迎的。

3 个答案:

答案 0 :(得分:2)

作为一种快速而苛刻的解决方案(如果您拥有大量数据,性能较低):

SELECT * FROM [tbl] ORDER BY CAST(SUBSTR([col], INSTR([col], '],') + 2) AS INTEGER);

但正如Hayley建议的那样,要重新评估数据,您可以使用:

INSERT INTO [new-tbl]
SELECT SUBSTR(val, 0, c1),
       SUBSTR(val, c1+1, c2-c1),
       CAST(SUBSTR(val, c2+2) AS INTEGER),
       [more-cols]
FROM (
    SELECT INSTR([col], ',') AS c1,
           INSTR([col], '],') AS c2,
           [col] AS val,
           [more-cols]
    FROM [tbl]);

答案 1 :(得分:1)

问题的解决方案不是您问题的答案。分隔的统计信息列表不应该是表格中的列。有关详细信息,请参阅this question。而是使用以下方法重新评估您的架构并按适当的列对查询进行排序:

SELECT [columns to select] FROM tableName ORDER BY [column to order by] 

答案 2 :(得分:-1)

SQL支持ORDER BY函数,您可以在其中订购特定列。

SELECT *last column name* FROM *table name* ORDER BY *last column name*

如果需要,您可以在末尾添加DESC以进行降序。