Sql DATEPART

ZareLepotec

Pripravnik
2. okt 2007
47
0
6
Jest ne poštekam tega DATEPART-a v SQL-u. Mi ga zna kdo razložit? Sem bolj frišen v SQL-u, tko da mi tud oni help ni kaj v veliko pomoč.
Se mi zdi, da mi manjka razumevanje določenih sql temeljev
crazy1.gif
 

ZareLepotec

Pripravnik
2. okt 2007
47
0
6
Bom mal pobrskal za njo, hvala.

Kako misliš 'samo željeni del'? Če maš v bazi nek zapis imaš zraven ponavadi pripet tudi stolpec z datum, recimo vnosa. In ko selectaš enostavno definiraš datumske omejitve z recimo
Koda:
WHERE 'ime_datumskega_stolpca' >= '2008-05-01' AND < '2008-05-21'

Itak verjetno to ni to, ker ne štekam smisla uporabe DATEPART-a
bonk.gif
 

shootek

Fizikalc
3. sep 2007
909
96
28
select 1 from dual;
Kaj pa ko želiš izbrati kateri dan v tednu je 21-05-2008 oz. kateri teden v letu,...... (lahko naštejem še X zadev)
Datumska polja se ne uporabljajo samo zato, da v where pogoju definiraš pas podatkov.

Sicer tudi sam ne uporabljam DATEPART (ker ga v mojem SQL-u ni
smirk-1.gif
), uporabljam pa kombinacije substr, next_day,months_between,last_day,.....
 

doto

Fizikalc
25. jul 2007
3.175
0
36
Predstavljaj si, da želiš dobiti ven vse zapise, ki so bili:

- na ponedeljek
- med 8 in 16 uro
- v februarju
- ...

Tu brez datepart funkcije ne gre
 

futuristic

geđet frik
Osebje foruma
13. jul 2007
7.900
640
113
Datepart se uporablja predvsem za oblikovanje izpisa datuma.

Mogoče ti bo lažje razumeti na primerčkih:

Npr. da hočeš videti v katerih letih so se neki dogodki odvijali:
Koda:
select distinct datepart(yyyy,CasDogodka) as leto from TabelcaDogodkov
To ti bo izpisalo npr:
2005
2007
2008


Za filtriranje pa uporabiš raje funkcijo year().
Npr. da hočeš videti vse dogodke v letu 2007:
Koda:
select * from TabelcaDogodkov where year(CasDogodka)=2008
To bo pač vrnilo vse zapise katerih CasDodogka vsebuje leto 2008
 

Ares

kamikaza
19. jul 2007
4.622
0
36
ksz

poleg tega NIKOLI ne uporabljaj: WHERE datepart(yyyy,DatumDogodka) >= 'XX.XX.XXXX' AND datepart(yyyy,DatumDogodka) <= 'YY.YY.YYYY'

ampak uporabiš ukaz BETWEEN
 
Nazadnje urejeno:

Ares

kamikaza
19. jul 2007
4.622
0
36
vem da tisto kar je on napisal nebi delovalo, samo dajat pogoj z dvema datepartoma je tudi bolj obremenjujoč za procesiranje. Zato tudi obstaja ukaz between ki deluje bolj optimizirano pri takih zahtevah.

Where A => X and A <= Y moraš obvezno spremeniti v Where A is between X and Y

hitrost izvedbe queryja je dosti hitrejši.
 

ZareLepotec

Pripravnik
2. okt 2007
47
0
6
OK, sem mi zdi, da sem tale datepart počasi pošteku. Edin uporabo rabm verjetno še malo naštudirat. Pri kakih statistikah, prou pride, ko zbiraš dogodke za več dni ob istih urah recimo.

Kar se pa betweena tiče je pa tko, da v mojem primeru ne bo prišel toliko v poštev, ker zajema tudi zgornjo vrednost. Zgornja vrednost pa pri polnoči (00:00) pomeni že naslednji dan. Pride do različnih izpisov.

Hvala za pomoč!
 

Ares

kamikaza
19. jul 2007
4.622
0
36
Citat:
Uporabnik ZareLepotec pravi:
OK, sem mi zdi, da sem tale datepart počasi pošteku. Edin uporabo rabm verjetno še malo naštudirat. Pri kakih statistikah, prou pride, ko zbiraš dogodke za več dni ob istih urah recimo.

Kar se pa betweena tiče je pa tko, da v mojem primeru ne bo prišel toliko v poštev, ker zajema tudi zgornjo vrednost. Zgornja vrednost pa pri polnoči (00:00) pomeni že naslednji dan. Pride do različnih izpisov.

Hvala za pomoč!

res te ne zastopim kaj hočeš povedat glede between-a in pa zgornjo vrednostjo ter polnočjo (00:00:00)
confused-1.gif


between je za določanje spodnje in zgornje vrednosti, zato te res ne štekam kaj hočeš povedat.
 

jurek1973

Guru
3. sep 2007
4.131
1.087
113
Kakšna točno je definicija za between?
X <= vrednost <= Y
ali
X <= vrednost < Y

Ker če je prva varianta, potem lahko tisto mejno vrednost dobiš v dveh skupinah:
"between X and Y" ter tudi "between Y and Z".
Kar pa pri raznih statistikah ni ravno najbolje.
 

futuristic

geđet frik
Osebje foruma
13. jul 2007
7.900
640
113
Enostaven primer:
Recimo, da hočem prodajo med 10 in 11 dnem v mesecu, ter 11 in 12 dnem v mesecu.

select * from TabelaRacunov where day(CasProdaje) between 10 and 11
select * from TabelaRacunov where day(CasProdaje) between 11 and 12

V tem primeru bi 11 dan upošteval v dveh statistikah kar nebi bilo ok.
 

Ares

kamikaza
19. jul 2007
4.622
0
36
ok, samo to ni za statistiko....to je za preglede, kjer pa ponavadi ne uporabljaš 2 query-ja

pri statistiki se nekaj računa, kar pomeni, da boš uporabil tudi ukaz GROUP BY

torej, če potrebuješ 2 podatka (recimo v tvojem primeru po mesecu) enostavno uporabiš en query in ukaz group by datepart(month,datum)
 

futuristic

geđet frik
Osebje foruma
13. jul 2007
7.900
640
113
Ma sej zgornja gueryija nimata pomena, pokazati sem želel samo, kako se pri between lahko mejni pogoj pojavi v dveh poizvedbah.
"Groupy by" poznam.
grin1.gif
 

Ares

kamikaza
19. jul 2007
4.622
0
36
itak da poznaš group by ukaz...bi blo čudno če ga nebi
grin1.gif


to vem da se lahko pojavi v 2+ poizvedbah, samo ne spomnim se RL primera ko bi se to res zgodilo...