Portál AbcLinuxu, 10. května 2025 20:42
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.Řešení dotazu:
Hoď sem výstup .schema
např.
sqlite> .schema CREATE TABLE t (a integer, b boolean);
ať víme, co tam máš za datové typy.
CREATE TABLE "a11" (
"field1" INTEGER,
"field2" INTEGER,
"field3" INTEGER,
"field4" TEXT,
"field5" TEXT,
"field6" TEXT
)
hh:mm
lze použít strftime
, jak správně uhodl tazatel:
sqlite> select strftime("%s", "02:30") - strftime("%s", "01:00"); 5400Výsledkem je rozdíl ve vteřinách.
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
"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.
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.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.