Portál AbcLinuxu, 10. května 2025 20:42

Dotaz: Rozdíl časů v SQlite

23.3.2019 13:02 jsk
Rozdíl časů v SQlite
Přečteno: 1118×
Odpovědět | Admin
Zdravím,
mám v tabulce dva sloupce ve formátu hh:mm a potřebuji a počítám SUM z jejich rozdílu SELECT SUM(field5-field4) FROM tabulka WHERE field2 = '1'. Nevím jak nastavit formát sloupce, aby počítal s časem. Asi tam někam patří strftime nebo time, ale nevím jak na to, můžete mne navést? Děkuji.
Pepa

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

xkucf03 avatar 23.3.2019 13:47 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: Rozdíl časů v SQlite
Odpovědět | | Sbalit | Link | Blokovat | Admin

Hoď sem výstup .schema např.

sqlite> .schema
CREATE TABLE t (a integer, b boolean);

ať víme, co tam máš za datové typy.

Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
23.3.2019 14:18 jsk
Rozbalit Rozbalit vše Re: Rozdíl časů v SQlite
CREATE TABLE "a11" ( "field1" INTEGER, "field2" INTEGER, "field3" INTEGER, "field4" TEXT, "field5" TEXT, "field6" TEXT )
Může být? DB jsem vytvořil importem z csv v DB Browser for SQlite a přistupuji pomocí skriptu v pythonu. Výstup z cmd se mi nedaří, nainstaloval jsem SQlite včera a nemám s db skušenosti. Pokud by to pomohlo, tak mohu upravit soubor csv, vytvářím ho. To bych asi musel udělat přepočet min na desetinné číslo, pokud to půjde.
Děkuji za ochotu.
Pepa
23.3.2019 20:06 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: Rozdíl časů v SQlite
Jak z toho poznáš, k čemu ta tabulka slouží a který z těch sloupců reprezentuje čas? Pojmenuj si je pořádně!
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Řešení 2× (BoneFlute, jsk)
23.3.2019 19:42 Bherzet | skóre: 19 | blog: Bherzetův blog
Rozbalit Rozbalit vše Re: Rozdíl časů v SQlite
SQLite žádný datový typ pro čas nemá. Pro odečtení dvou textových hodnot ve formátu hh:mm lze použít strftime, jak správně uhodl tazatel:
sqlite> select strftime("%s", "02:30") - strftime("%s", "01:00");
5400
Výsledkem je rozdíl ve vteřinách.
23.3.2019 21:09 jsk
Rozbalit Rozbalit vše Re: Rozdíl časů v SQlite
Tak koukám, že problém je jinde, ono to totiž čas pozná. Přikládám soubor zdroj.csv, když v Excelu spočítám rozdíl časů pro '1' ve sloupci 2, dostanu hodnotu 42, což je správně (myslím si, kontroloval také jsem "ručně"). Pokud v SQlite3 přes Python použiju SELECT SUM(field5-field4) FROM tabulka WHERE field2 = '1' dostanu 41. Mátlo mne, že když jsem skript přesměroval do csv, Excel ukázal -41 (tomu nerozumím, zatím nevadí) a počet řádků s podmínkou field1='1' je 41. Zdroj jsem udělal i ve variantě, že minuty jsou v samostatných sloupcích a SELECT SUM((field6+field7/60)-(field4+field5/60)) FROM b11 WHERE field2 = '1' dává opět 41
Nemáte tušení čím to je, kde dělám chybu?

Zdraví a děkuje Pepa
23.3.2019 21:32 A ještě ten soubor
Rozbalit Rozbalit vše Re: Rozdíl časů v SQlite
Příloha:
někdy se to stane :-(...
23.3.2019 21:31 jsk
Rozbalit Rozbalit vše Re: Rozdíl časů v SQlite
Děkuji, to je přesně ono!!! Viz "SELECT (SUM(strftime('%s', field5)-strftime('%s', field4)))/3600 FROM a11 WHERE field2 = '1', jen mě pořád vrtá v kebuli proč to dávalo původně špatný výsledek.

Moce DĚKUJI Pepa
23.3.2019 22:16 jsk | skóre: 10
Rozbalit Rozbalit vše Re: Rozdíl časů v SQlite
Funguje je to i takto SELECT SUM(strftime('%H', field5)-strftime('%H', field4))+(SUM(strftime('%M', field5)-strftime('%M', field4)))/60 FROM a11 WHERE field2 = '1', ještě jednou díky Bherzetovi. Původně jsem se snažil nacpat %H a %M k sobě např. strftime('%H:%M', field5, ':') a to se to pak vztekalo.
Pepa

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.