Pomoc przy kwerendach (rekordy z datą 2 lata starszą)

Użytkowanie programu bazodanowego
DEWO
Posty: 2
Rejestracja: wt mar 12, 2013 3:11 pm

Pomoc przy kwerendach (rekordy z datą 2 lata starszą)

Post autor: DEWO »

Witam.

Muszę przyznać iż jestem nowy w swerach tego oprogramowania jak i moja wiedza na temat baz danych jest ograniczona, natomiast szybko się uczę i dużo rozumiem :)

Opisze mój problem.

Chcę stworzyć za pomocą OO Base prostą baze danych zawierającą spis osób + pare dodatkowych informacji.

Kluczowym polem każdego rekordu będzie Data.
Musi być ona pełną datą (dzien/miesiac/rok).
Wszystko jest już sprawne, baza działa i dodaje sobie za pomocą stworzonego formularza wszystkie potrzebne rekordy.

Natomiast natrafiłem na mur którego nie umiem ominąć/przebić a mianowicie kwerende.

Chciałbym aby za pomocą 1 kwerendy OO pobierał sobie dzisiejszą date i wyswietlał wszystkie rekordy które są starsze niż dokładnie 2 lata.

W siecie wyszukałem wpisy SQL'owe typu: ">= dateValue(DateAdd("yyyy",-2,Date()))"

Z tego co rozumiem mniej wiecej o cos takiego mi chodzi.

Baza wyglada tak:
Nazwa: Baza
Pola: Imie, Nazwisko, PESEL (klucz), Data, Telefon, Data_kontaktu

Czy ktoś mógłby nakierować lub pomóc w tej kwestii?

Dziękuje,
DEWO.
OpenOffice 3.3.0
Winfows 7 64bit
Jan_J
Posty: 4626
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Pomoc przy kwerendach (rekordy z datą 2 lata starszą)

Post autor: Jan_J »

Witaj,
używając Base napotkasz na kilka problemów:
* wbudowany w Base system HSQLDB 1.8 ma bardzo ograniczone możliwości zarządzania datami. Patrz http://hsqldb.org/doc/1.8/guide/
* istnieją nowsze wydania HSQLDB, które da się zintegrować z OOo/LO Base -- patrz np. http://ooo-forums.apache.org/en/forum/v ... 13&t=44483 -- tracąc przenośność na inne instalacje tej samej wersji pakietu
* możesz zorganizować sobie bazę w systemie zewnętrznym, co w Twoim przypadku mija się z celem, ale i tak edytor zapytań będzie zgłaszał obiekcje co do niektórych konstrukcji językowych poprawnych w danym systemie.

Niech Tabela ma pola Klucz, Nazwa, Data, odpowiednio typów Int, Str, Date.

Użycie funkcji dateadd, o którą pytasz, nie wchodzi w grę, bo w HSQLDB takiej funkcji nie ma.
Zapytanie z użyciem funkcji datediff('yy', data, current_date) zwróci różnicę w latach kalendarzowych, tj. skok wartości wystąpi w Nowy Rok zamiast w dniu urodzin.
Ja bym zamiast tego pytał, czy datediff('dd', data, data1) daje wynik dodatni, gdzie data1 powstałaby z bieżącej daty poprzez cofnięcie roku o odpowiednią liczbę. Coś w stylu

Kod: Zaznacz cały

SELECT * FROM Tabela  
WHERE DATEDIFF('day', Data, 
   year(current_date) - 2 || '-' || 
   month(current_date) || '-' || 
   day(current_date) ) > 0
Z jednym ale: Base kwestionuje numer miesiąca składający się z jednej cyfry. Tak więc dodatkowe '0' trzeba wstawić jawnie:

Kod: Zaznacz cały

SELECT * FROM Tabela
WHERE DATEDIFF('day', Data, 
   year(current_date) - 2 || '-' || 
   case when month(current_date) < 10 then '0' else '' end || 
   month(current_date) || '-' || 
   day(current_date) ) > 0
Zaznaczam, że całe to cudactwo nie wynika z użycia systemu SQL-owego, tylko ze słabości obsługi dat w konkretnej wersji systemu HSQLDB.
JJ
LO (25.2|24.8) ∙ Python (3.12|3.10) ∙ Unicode 16 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
DEWO
Posty: 2
Rejestracja: wt mar 12, 2013 3:11 pm

Re: Pomoc przy kwerendach (rekordy z datą 2 lata starszą)

Post autor: DEWO »

Bardzo dziękuje za pomoc. Postaram się coś z tym porzeźbić ale myślę że skala tego "projektu" jest na tyle mała żeby nie bawić się jednak w baze, i prawdopodobnie postaram się taką baze zrobic w excelu ew. w darmowym SQL. Problem w tym ze to raczej nie moze wisiec w sieci i powinien być przenośny i prosty w obsłudze.

Jeszcze raz dzieki za tak fachową pomoc!
OpenOffice 3.3.0
Winfows 7 64bit
Jan_J
Posty: 4626
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Pomoc przy kwerendach (rekordy z datą 2 lata starszą)

Post autor: Jan_J »

Możesz, zwłaszcza że użycie funkcji rok(), miesiąc(), dzień(), data() w arkuszu jest proste.
Można też importować skoroszyt arkusza do pliku odb jako źródło danych i zadawać pytania w SQL-u.
JJ
LO (25.2|24.8) ∙ Python (3.12|3.10) ∙ Unicode 16 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
ODPOWIEDZ