SQLite 按字符串中的最后一个字符对行进行排序

标签 sql database sqlite

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

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

我正在尝试根据最后一个 5 或其他可能的内容(它也可以是多位数字)对行进行排序。我尝试了几乎所有我能在互联网上找到的东西,但如果有很多问题是因为语法错误(即使我准确地复制了查询)或特定功能不存在的问题而且我不太确定这些错误的原因是什么。我对 MySQL 不是很熟悉,所以非常感谢一个简单的答案。

最佳答案

作为一个快速而 hacky 的解决方案(如果您有大量数据,性能会很低):

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]);

关于SQLite 按字符串中的最后一个字符对行进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31306351/

相关文章:

c# - 我该如何解决这个问题?不支持关键字 'datasource'

php - php 和 Mysql 中的警报?

sqlite - 尝试向SQLite表中添加UNIQUE INDEX时为什么出现“索引列不是唯一的”错误?

mysql - MyBatis批量更新异常:Column cannot be null

mysql - 减少查询 Yii2

sql - 选择查询中的动态类型转换

node.js - NodeJS + MongoDB : find() where { 'value' : < 5 AND >1} - how?

sql - 展平相交的时间跨度

java - Android:找不到我的包文件夹来放置数据库文件?

android - SQLite 异常查询错误