2016-08-01 3 views
1

У меня есть десять таблиц в базе данных: 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?

+0

'name' - это строка, а сортировка - алфавитная.Результат правильный –

+0

@juergend Как отсортировать таблицы так, чтобы таблица '2016_08_01 (10)' стала последней/первой? – Curious

ответ

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 логика.

+0

Ошибка SQL или отсутствующая база данных (нет такой функции: SUBSTRING) – Curious

+0

попробуйте использовать 'SUBSTR'. запрос обновлен – 1000111

+0

Я бы добавил, что эту проблему можно было бы избежать в будущем путем нулевого заполнения имен таблиц, поэтому у вас есть 2016_08_01 (10), 2016_08_01 (09), 2016_08_01 (08) и т. д. – nvuono

2

Чтобы сделать эту работу, создайте имена таблиц, такие как 2016_08_01(0001), где часть 0001 будет иметь достаточное количество символов, чтобы соответствовать наибольшему количеству создаваемых таблиц.

Однако имейте в виду, что вы в основном побеждаете цель базы данных SQL, делая это. Есть ли причина, по которой вы не можете сделать эту одну таблицу с столбцом Segment (тип INT), чтобы отличить группы записей?

+0

Просто мое имя для столбца, в котором говорится, что «эта строка находится в группе 1, эта строка в группе 2» и т. Д. Не специальный столбец или что-то еще. –

Смежные вопросы