2016-08-01 9 views
1

Ich habe zehn Tabellen in SQLite Datenbank:
Wie die letzte Tabelle von SQLite-Datenbank erhalten

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



Und ich diese query den letzten Tisch zu bekommen:
SELECT name FROM sqlite_master WHERE type='table' ORDER BY name DESC
aber das Ergebnis ist:

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



Die Abfrage wurde für mich zu arbeiten, bis Tisch 2016_08_01(9)

Gibt es eine Alternative query? oder stimmt etwas nicht mit meinem query?

+0

'name' ist eine Zeichenfolge und die Sortierung erfolgt alphabetisch.Das Ergebnis ist korrekt –

+0

@juergend Wie die Tabellen zu sortieren, so dass Tabelle '2016_08_01 (10)' die letzte/erste wird? – Curious

Antwort

1

In MySQLrelevant, weil die Frage MySQL wurde markiert zusammen mit SQLite

kann

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

Sie können es in der folgenden Art und Weise durchgeführt werden umwandeln zu gleichwertigen sqlite Logik.

+0

SQL-Fehler oder fehlende Datenbank (keine solche Funktion: SUBSTRING) – Curious

+0

versuchen 'SUBSTR' verwenden. Abfrage aktualisiert – 1000111

+0

Ich würde hinzufügen, dass dieses Problem in der Zukunft durch Zero-Padding der Tabellennamen vermieden werden könnte, so dass Sie haben 2016_08_01 (10), 2016_08_01 (09), 2016_08_01 (08) usw. – nvuono

2

Erstellen Sie Tabellennamen wie 2016_08_01(0001), wobei der 0001-Teil garantiert über genügend Zeichen verfügt, um die größte Anzahl von Tabellen zu erstellen, die Sie erstellen.

Beachten Sie jedoch, dass Sie damit den Zweck einer SQL-Datenbank im Grunde genommen besiegen. Gibt es einen Grund, warum Sie diese eine einzige Tabelle mit einer Spalte (Typ INT) nicht erstellen können, um die Gruppen von Datensätzen zu unterscheiden?

+0

einfach mein Name für eine Spalte, die sagt, „diese Zeile in der Gruppe 1, diese Zeile in der Gruppe 2“ usw. Nicht eine besondere Art der Säule, oder irgendetwas. –