Fórum pro uživatele kancelářského balíku OpenOffice | LibreOffice
 

#1 1. 10. 2013 13:25:20

prokopvaclav
Člen
Registrace: 1. 10. 2013
Příspěvků: 1

Base neumí počítat

Dobrý den,
snažím se již druhý den dát dohromady jednu sestavu v Base. Problém je v tom, že base neumí počítat (nebo to neumím já)... Mám podobný dotaz:


DATEDIFF( 'second', "Vykaz"."Cas_od", "Vykaz"."Cas_do" ) / 28800 AS "Pocet_dnu


Výsledek mi ukáže počet dnů naprosto špatně. Pokud však na konci dělím pouze 480 vyjde mi dotaz přesně (pokud následně na kalkulačcce vydělím ještě 60).


Stejný problém mám i u času - potřebuji zjistit počet hodin - pokud vydělím výsledek 3600 vyjde mi nesmysl, pokud pouze dělím 60, vše je v pořádku. Pokud v DATEDIFF použiji hour dostanu velmi nepřesný výsledek.


Nevíte kde je chyba? Formátováním sloupce to není, přijde mi, že base nějak sám zaokrouhluje jak se mu zachce.



SELECT
"Vykaz"."Cas_od", "Vykaz"."Cas_do", "Zakazka"."Kod", "Operace"."Nazev", "Vykaz"."Pocet_ks", "Operace"."Norma", "Operace"."Tarif", "Pracovnik"."Jmeno",


DATEDIFF( 'second', "Vykaz"."Cas_od", "Vykaz"."Cas_do" ) / "Operace"."Cas" AS "Mel_vyrobit",


( 3600 * "Vykaz"."Pocet_ks" ) / ( DATEDIFF( 'second', "Vykaz"."Cas_od", "Vykaz"."Cas_do" ) * "Operace"."Norma" ) AS "Efektivita",


( "Vykaz"."Pocet_ks" * "Operace"."Cas" ) / 3600 AS "Cas_dle_normy",


DATEDIFF( 'second', "Vykaz"."Cas_od", "Vykaz"."Cas_do" ) / 60 AS "Skutecny_cas",


DATEDIFF( 'second', "Vykaz"."Cas_od", "Vykaz"."Cas_do" ) / 28800 AS "Pocet_dnu"


FROM
"Vykaz", "Pracovnik", "Operace", "Zakazka"


WHERE
"Vykaz"."Id_pracovnika" = "Pracovnik"."Id" AND "Vykaz"."Id_operace" = "Operace"."CisloOperace" AND "Vykaz"."Id_zakazky" = "Zakazka"."Id"



Všem díky za pomoc!

Editoval prokopvaclav (1. 10. 2013 13:27:27)

Offline

#2 2. 10. 2013 06:54:28

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 2,698

Re: Base neumí počítat

Asi by to chtělo, aby jste to sem postnul. Jde možná o to, jakou používáte verzi, nebo jakou databázi (dBase, txt, Adabas..), a nebo jestli máte správný ovladač (např MySQL). Ze samotných SQL dotazů to asi nikdo neodvodí. Funkce date a time se například řídí také dle nastaveného národního prostředí. To, co popisujete by spíš odpovídalo výpočtům mimo časové a datové funkce. Také ne všechny databáze podporují například vytváření relací. SQL není podporováno v plné funkcionalitě. Měly by chodit dobře snad jen příkazy Select. Funkce určené pro databáze začínají na "D" + název. Ale obecně platí, že není možné identifikovat problém bez ukázky. Často se stává, že pomocí slovního popisu bez ukázky dochází velice často k nedorozumění.


Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#3 4. 10. 2013 00:31:14

Schinagl
Člen
Registrace: 14. 2. 2007
Příspěvků: 36

Re: Base neumí počítat

Osobně si myslím, že máte někde chybná data. Funkce DATEDIFF('ss','2013-06-10','2013-06-20')/86400 vrátí 10 dni stejně jako DATEDIFF('dd','2013-06-10','2013-06-20'). Co to máte za konstantu 28800, den má 86400 s. DATEDIFF neumí pracovat jen s časem, musí mít kompletní formát DATE + TIME.

Offline

#4 23. 2. 2015 10:35:36

Dhokahai1
Člen
Registrace: 23. 2. 2015
Příspěvků: 1

Re: Base neumí počítat

Máte problém s tím že windows umožňuje běh 32 i 64 bit. programů. Používáte 32 bit OOo. Ty potřebují 32 bit Javu. 64 bit Java nepomůže.???

Offline

#5 23. 2. 2015 15:17:45

svacula1
Člen
Registrace: 19. 2. 2015
Příspěvků: 3

Re: Base neumí počítat

Funkcia DATEDIFF počíta správne. Návratová hodnota sa ukladá do typu INTEGER (celé číslo), teda pri výsledku v minutách sú nadbytočné sekundy ignorované, pri výsledku v hodinách sú nadbytočné minúty a sekundy ignorované atď. Ak sa celé číslo (INTEGER) delí, výsledkom je zase celé číslo (desatinné miesta sú ignorované). Ak pri výsledku funkcie v sekundách, potrebujete delením získať presný výsledok, musí sa to riešiť prevodom výsledku v sekundách typu INTEGER na typ NUMERIC, nastaviť počet desatinných miest a následne deliť.

Editoval svacula1 (23. 2. 2015 15:19:57)

Offline

#6 23. 2. 2015 15:38:33

hdplot
Člen
Registrace: 18. 2. 2015
Příspěvků: 79

Re: Base neumí počítat

Obdobnou věc jsem tu řešil nedávno. Výsledek mého snažení je nakonec tento dotaz:
SELECT "Cas_start", "Cas_stop", DATEDIFF( 'minute', "Cas_start", "Cas_stop" ) AS "Doba_minut", DATEDIFF( 'hour', "Cas_start", "Cas_stop" ) || ':' || DATEDIFF( 'minute', "Cas_start", "Cas_stop" ) - DATEDIFF( 'hour', "Cas_start", "Cas_stop" ) * 60 AS "Doba" FROM "Prubeh"

Výsledek dotazu ukazuje vstupní hodnoty (Cas_start a Cas_stop), rozdíl časů v minutách (AS Doba_minut) a převod na formát HH:MM. Muslím, že analogicky by to šlo použít i zde - čas v sekundách by se obdobně převedl na minuty, hodiny případně dny - pouhým rozšířením dotazu a změnou resp. doplněním parametru "minute", "hour" atd.

Offline

#7 23. 2. 2015 23:33:01

svacula1
Člen
Registrace: 19. 2. 2015
Příspěvků: 3

Re: Base neumí počítat

Musím upraviť svoj predchádzajúci príspevok v tom, že od výsledku v hodinách, mesiacoch a rokoch funkcia vráti rôzne výsledky. Ak deň Cas_star = Cas_stop alebo Cas_star < Cas_stop a hh:mi:ss Cas_start < Cas_stop výsledok je podľa očakávania. Ak však deň Cas_start < Cas_stop a hh:mi:ss Cas_start > Cas_stop výsledok je vyšší o 1. To isté platí aj u mm a yy.

Editoval svacula1 (24. 2. 2015 00:31:58)

Offline

#8 17. 3. 2015 10:17:56

student
Člen
Registrace: 27. 2. 2006
Příspěvků: 94

Re: Base neumí počítat

Takéto výpočty by som nechal na Calc
Dáta by som nechal v base, vytvoril šablónu v Calc kde by boli výpočty s datedif.
Následne pracovníka resp. všetkých naraz by som vyfiltroval v base a požadované údaje pre výpočet by som preniesol do Calc-u do vytvorenej šablóny so vzorcami.

Offline

#9 16. 10. 2015 13:35:12

delorisheinen
Člen
Registrace: 7. 10. 2015
Příspěvků: 4

Re: Base neumí počítat

It then displays the same output, which can be seenPlayground Tiles
in the table when the query runs (Database - Queries) and there appears only the precision to 2 decimal places.Playground Tiles But if the form's chosen field of "Numerical field" is here to set the accuracy and then it behaves as you describe, For more Detailrubber matting You know rubber flooring is the best company in uk rubber flooring

Editoval delorisheinen (1. 2. 2016 09:30:01)

Offline

Zápatí