ďťż
 
DB2 rok miesiac ďťż
 
DB2 rok miesiac
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

DB2 rok miesiac



jarek - 11-05-2007 12:33
DB2 rok miesiac
  Witam,
Czy ktoś z szanownych grupowiczów może podpowiedzień jak mam połączyń pola
rok='2007' miesiac='01' aby zrobić between

where rok||miesiac between '200701' and '200712'

Pozdrawiam

--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl





Artur - 11-05-2007 12:33

  wszystko zależy od tego jak przechowujesz datę w bazie danych. Jeśli
wprowadziłeś dane do bazy w postaci dwóch pól: rok i miesiąc, to takie
rozwiązanie nie jest zbyt szczęśliwe, ponieważ w zapytaniu będziesz
musiał porównywać niezależnie rok, a następnie porównać w następnej
klauzuli miesiąc.

Jeśli wybierzesz pole typu DATE wtedy możesz na takich danych
swobodnie operować (porównywać daty jak w kalendarzu):

....where pole_data between '2007-01-01' and '2007-03-31'
....where pole_data between '2007-01-01' and ( date('2007-03-01') + 1
month)
....where pole_data between '2007-01-01' and ( date('2007-03-01') + 1
month - 5 days + 1 year)

Jeśli chcesz porównywać zakresami po miesiącach (a nie dniach)
wystarczy, że zrobisz takie przekształcenie:

int(pole_data)/100

dostaniesz liczbę, która wygląda jak rok i miesiąc (np. 200705), którą
także możesz porównywać zakresami:
.... where int(pole_data)/100 between 200701 and 200703

PS. Możesz też wykorzystać funkcje, takie jak month(pole_data),
year(pole_data), np:

C:\temp>db2 values year(current date)

1
-----------
2007

1 record(s) selected.

-- Artur Wroński




Sebastian Ciesielski - 16-05-2007 00:01

 
Użytkownik "Artur" <artur.wronski@gmail.com> napisał w wiadomości
news:1178698300.491306.277330@n59g2000hsh.googlegr oups.com...
wszystko zależy od tego jak przechowujesz datę w bazie danych. Jeśli
wprowadziłeś dane do bazy w postaci dwóch pól: rok i miesiąc, to takie
rozwiązanie nie jest zbyt szczęśliwe, ponieważ w zapytaniu będziesz
musiał porównywać niezależnie rok, a następnie porównać w następnej
klauzuli miesiąc.

wcale nie

where
(rok*12+miesiąc) between (innyrok*12+miesiąc)

S.




Artur - 16-05-2007 00:01

  On 15 Maj, 11:37, "Sebastian Ciesielski" <s...@poczta.fm> wrote:
> Użytkownik "Artur" <artur.wron...@gmail.com> napisał w wiadomościnews:1178698300.491306.277330@n59g2000hs h.googlegroups.com...
> wszystko zależy od tego jak przechowujesz datę w bazie danych. Jeśli
> wprowadziłeś dane do bazy w postaci dwóch pól: rok i miesiąc, to takie
> rozwiązanie nie jest zbyt szczęśliwe, ponieważ w zapytaniu będziesz
> musiał porównywać niezależnie rok, a następnie porównać w następnej
> klauzuli miesiąc.
>
> wcale nie
>
> where
> (rok*12+miesiąc) between (innyrok*12+miesiąc)
>
> S.

Wyrażenie (rok*12+miesiąc) between (innyrok*12+miesiąc) and
(ijeszczennyrok*12+miesiąc) rzeczywiście jest zapisane w postaci
jednego warunku, ale wydajnościowo jest nie do zaakceptowania,
ponieważ pociąga sekwencyjny skan całej tabeli (nawet jak masz indeksy
na polach rok oraz miesiąc to baza ich nie użyje). Czyli w praktyce
nikt tak tego nie zapisze.

-- Artur





Sebastian Ciesielski - 17-05-2007 22:44

  Wyrażenie (rok*12+miesiąc) between (innyrok*12+miesiąc) and
(ijeszczennyrok*12+miesiąc) rzeczywiście jest zapisane w postaci
jednego warunku, ale wydajnościowo jest nie do zaakceptowania,
ponieważ pociąga sekwencyjny skan całej tabeli (nawet jak masz indeksy
na polach rok oraz miesiąc to baza ich nie użyje). Czyli w praktyce
nikt tak tego nie zapisze.

to fakt,
ale jeśli autor postu, z jakichś przyczyn, datę ma zapisaną w taki sposób,
to może niech doda pole GENERATED ALWAYS z wykalkulowaną jakąś akceptowalną
datą

pozdrawiam

S.




Artur - 17-05-2007 22:44

  > to fakt,
> ale jeśli autor postu, z jakichś przyczyn, datę ma zapisaną w taki sposób,
> to może niech doda pole GENERATED ALWAYS z wykalkulowaną jakąś akceptowalną
> datą
>
> pozdrawiam
>
> S.

zgadzam się. Pole GENERATED ALWAYS z indeksem rozwiąże problem
wydajnościowy.
Jeśli jednak aplikacja jest we wczesnej fazie dewelopementu (tego nie
wiem) sensowniej jest wbrać DATE albo TIMESTAMP.

Tak na marginesie to wyrażenie porównujące powinno mieć postać (w
odniesieniu do oryginalnej treści zapytania):

where rok*100 + miesiac between 200701 and 200712

Pozdrawiam,
Artur
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    db2 alter table alter column set default =?ISO-8859-2?Q?Re:_DB2_-_niesp=F3jne_zapytanie_wg._asktom.oracle.com?= Oracle XE lub DB2 Express-C i wspolpraca z Visual C# 2005 Expess Edition IBM DB2 Express - czy podobnie jak Oracle Expreess ma wycieta Javew procedurach? Re: DB2 za darmo - =?ISO-8859-2?Q?troch=EA_wi=EAcej?= =?ISO-8859-2?Q?db2_obj=EAto=B6=E6_bazy?= [db2] Update sql posiłkowany danymi z innej tabeli =?iso-8859-2?q?Konfiguracja_domy=B6lna_DB2_Express-C?= [DB2/Websphere]: JDBC - result set closed db2 -klucze obce optymalizacja zapytan i inne
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • natalia97.htw.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com