如何从SQLite数据库中获取最后一个表

时间:2016-08-01 17:19:41

标签: sql sqlite

我在SQLite数据库中有十个表:

2016_08_01(10)
2016_08_01(9)
2016_08_01(8)
2016_08_01(7)
2016_08_01(6)
2016_08_01(5)
2016_08_01(4)
2016_08_01(3)
2016_08_01(2)
2016_08_01



我使用这个query得到最后一个表:
SELECT name FROM sqlite_master WHERE type='table' ORDER BY name DESC
但结果是:

2016_08_01(9)
2016_08_01(8)
2016_08_01(7)
2016_08_01(6)
2016_08_01(5)
2016_08_01(4)
2016_08_01(3)
2016_08_01(2)
2016_08_01(10) //why?
2016_08_01



该查询对我有用,直到表2016_08_01(9)

是否有替代query?或者我的query出现了问题?

2 个答案:

答案 0 :(得分:2)

要使这项工作正常,请构建像2016_08_01(0001)这样的表名,其中0001部分保证有足够的字符以适合您将创建的最大数量的表。

但是,请注意,这样做基本上是在破坏SQL数据库的目的。您是否有理由不能使用Segment列(类型为INT)创建这一个单独的表来区分记录组?

答案 1 :(得分:1)

MySQL 相关,因为问题被标记为MySQL以及sqlite

可以通过以下方式完成

SELECT 
 name
FROM sqlite_master 
WHERE type='table' 
ORDER BY
    COALESCE(SUBSTR(name,LOCATE('(',name)+1,(LOCATE(')',name) -
                   LOCATE('(',name)-1)),0)+0 DESC;

WORKING DEMO

您可以将其转换为等效的sqlite逻辑。