Pitäisi saada eräässä kyselyssä accessissa laskettua kahden ajan välinen aikaero tunteita, mutta luvuista pitäisi ottaa pois mahdolliset viikonloput?? onko tähän mitään tapaa? olen käyttänyt tähän asti DateDiff funktiota, mutta ei ainakaan itse löytänyt siitä tällaista ominaisuutta..
päiväyksistä vkonloput pois
11
648
Vastaukset
- eakem
...millaisesta kyselystä on kyse.
- eakem
Tässä on yksi kyselyn malli:
select * from taulu where format(pvm_kentta,'ddd') not in ('la','su');
Nuo la ja su korvaat niillä päivillä jotka haluat jättää pois. Tosta jää lauantait ja sunnuntait pois. Jos access on eri kielinen (tai saattaa olla kiinni myös käyttiksen kieliasetuksista, en muista varmaksi) niin muutat noita 'la' ja 'su' vastaavasti. - otso
eakem kirjoitti:
Tässä on yksi kyselyn malli:
select * from taulu where format(pvm_kentta,'ddd') not in ('la','su');
Nuo la ja su korvaat niillä päivillä jotka haluat jättää pois. Tosta jää lauantait ja sunnuntait pois. Jos access on eri kielinen (tai saattaa olla kiinni myös käyttiksen kieliasetuksista, en muista varmaksi) niin muutat noita 'la' ja 'su' vastaavasti.minulla on siis taulukossa kaksi kenttää, aloitus-ja lopetusaika. minun pitäisi saada laskettua näiden kahden kentän välinen aikaero tunteina sillälailla, että viikonloppuja ei oteta huomioon. esim jos aloitusaika on 6.8.2004 23.45 (joka sattuu olemaan perjantai) ja lopetusaika on 9.8.2004 9.45 (maanantai) niin näiden välinen aikaero pitäisi olla 10 tuntia eikä 58 tuntia, jonka DateDiff laskee. Onko tähän olemassa mitään tapaa? Vieläkin parempi olisi jos pystyisi ohittamaan kaikki pyhäpäivät, mutta se taitaa jo olla aivan liian vaikeeta...
- ...........
otso kirjoitti:
minulla on siis taulukossa kaksi kenttää, aloitus-ja lopetusaika. minun pitäisi saada laskettua näiden kahden kentän välinen aikaero tunteina sillälailla, että viikonloppuja ei oteta huomioon. esim jos aloitusaika on 6.8.2004 23.45 (joka sattuu olemaan perjantai) ja lopetusaika on 9.8.2004 9.45 (maanantai) niin näiden välinen aikaero pitäisi olla 10 tuntia eikä 58 tuntia, jonka DateDiff laskee. Onko tähän olemassa mitään tapaa? Vieläkin parempi olisi jos pystyisi ohittamaan kaikki pyhäpäivät, mutta se taitaa jo olla aivan liian vaikeeta...
Ellen ole aivan väärässä, niin tuota et saa tehtyä suoraan tietokannassa, vaan se pitää tehdä jollain ohjelmointikielel, ihan helppo tommonen on tehdä.
Otat eka kahden päivämäärän eron tolla DateDiffil tietokannasta (otat myös päivämäärä kenttien arvot mukaan) sit tarkastat ohjelmointikielelläsi onko siinä viikonloppuja välissä tai juhlapyhiä, jos on niin vähennät 24h*päivien lukumäärä, siis viikonlopussa 48h vähennys
Ihan mielenkiinnosta mihkä sie tota tarttet? - osto
........... kirjoitti:
Ellen ole aivan väärässä, niin tuota et saa tehtyä suoraan tietokannassa, vaan se pitää tehdä jollain ohjelmointikielel, ihan helppo tommonen on tehdä.
Otat eka kahden päivämäärän eron tolla DateDiffil tietokannasta (otat myös päivämäärä kenttien arvot mukaan) sit tarkastat ohjelmointikielelläsi onko siinä viikonloppuja välissä tai juhlapyhiä, jos on niin vähennät 24h*päivien lukumäärä, siis viikonlopussa 48h vähennys
Ihan mielenkiinnosta mihkä sie tota tarttet?tarvitsisin tätä tomintoa vaan erääseen hommaan missä pitäisi katsoa pitävätkö tietyt lähtövalmiustasot paikkansa. Siinä vain pitäisi skipata viikonloput. Tässä ohjelmointikielen käytössä on vain se ongelma, että minun tapauksessani se tieto pitäisi saada toimimaan automaattisesti kun taulukkoa taas joskus tulevaisuudessa päivitetään, joten jos teen se jotenkin muuten niin joudun aina siirtämään tiedot ensiksi omaan ohjelmaani ja takaisin ja siitä aiheutuu sitten hieman liikaa hommaa.. Mutta kiitoksia vaan avusta, yritän vielä keksiä jotain ratkaisuja ongelmaan.
- Punikki & 7 hyypiötä
osto kirjoitti:
tarvitsisin tätä tomintoa vaan erääseen hommaan missä pitäisi katsoa pitävätkö tietyt lähtövalmiustasot paikkansa. Siinä vain pitäisi skipata viikonloput. Tässä ohjelmointikielen käytössä on vain se ongelma, että minun tapauksessani se tieto pitäisi saada toimimaan automaattisesti kun taulukkoa taas joskus tulevaisuudessa päivitetään, joten jos teen se jotenkin muuten niin joudun aina siirtämään tiedot ensiksi omaan ohjelmaani ja takaisin ja siitä aiheutuu sitten hieman liikaa hommaa.. Mutta kiitoksia vaan avusta, yritän vielä keksiä jotain ratkaisuja ongelmaan.
>Tässä ohjelmointikielen käytössä on vain se ongelma, että minun tapauksessani se tieto pitäisi saada toimimaan automaattisesti kun taulukkoa taas joskus tulevaisuudessa päivitetään, joten jos teen se jotenkin muuten niin joudun aina siirtämään tiedot ensiksi omaan ohjelmaani ja takaisin ja siitä aiheutuu sitten hieman liikaa hommaa..
No tuonhan saa VBA:lla tehtyä eli tietoja ei tarvi käyttää minkään ulkoisen ohjelman kautta.
- paakki
Laita hakukyselyn Ehdoksi:
Not "la" And Not "su"
Tämä poistaa päivämääräkentästä päivät "la" ja "su".
Korvaat tietysti nuo "la" ja "su" sun omilla pvm-nimikkeilläsi.- paakki
Mulla on Access-lomakkeessa tällainen pvm-juttu, joka on toteutettu Accessin Visual Basic-koodilla.
Lomakkeessa on kolme Muokkausruutua:
Muokkaus36 on muotoa Weekday(Date()).
Muokkaus38 on pelkkä muokkausruutu ilman muotoja.
Muokkaus40 on muotoa =Time()
Koodi (Lomaketta aktivoitaessa):
- - - - - - - - - -
Private Sub Form_Activate()
Me.Refresh
If Muokkaus36 = 1 Then
Muokkaus38 = "sunnuntai " & Date
Else
If Muokkaus36 = 2 Then
Muokkaus38 = "maanantai " & Date
Else
If Muokkaus36 = 3 Then
Muokkaus38 = "tiistai " & Date
Else
If Muokkaus36 = 4 Then
Muokkaus38 = "keskiviikko " & Date
Else
If Muokkaus36 = 5 Then
Muokkaus38 = "torstai " & Date
Else
If Muokkaus36 = 6 Then
Muokkaus38 = "perjantai " & Date
Else
If Muokkaus36 = 7 Then
Muokkaus38 = "lauantai " & Date
End If
End If
End If
End If
End If
End If
End If
End Sub
- - - - - - - - - -
Koodi (Muokkaus38:aa klikatessa):
Private Sub Muokkaus38_DblClick(Cancel As Integer)
Muokkaus40 = Time()
MsgBox "Tänään on " & Muokkaus38 & " ja kello on " & Muokkaus40 & "."
Me.Refresh
End Sub
- - - - - - - - - -
Eli kun kun lomake aktivoituu (avautuu), saa tietyt muokkausruudut arvoiksi joko ajan tai viikonpäivän. Ja kun klikkaa Muokkaus38:aa, tulee sen arvoksi "Tänään on maanantai 23.8.2004 ja kello on 12:11:45."
Aika pitkä ja ehkä sekavakin juttu, mutta tuo toimii täysin. Sun kohdalla voisit tehdä kyselyn, joka poistaa siis lauantait ja sunnuntait. Tällöin joudut kyllä käyttämään muokkausruutujen asemesta taulukoissa olevia kenttiä, joille annat muodoiksi joko pvm, klo tai teksti.
- eakem
...alku- ja loppuajan välillä, ts. useita viikonloppuja? Jos ei, voisi tehdä union kyselyn, jossa aikajakson pilkkoo osiin, esim:
SELECT nimi,alkuaika,loppuaika,alkuaika as uusialkuaika, datevalue(dateadd('d',1,alkuaika))-alkuaika as hyv_aika
FROM Taulukko1
where loppuaika-alkuaika>0
UNION
SELECT nimi,alkuaika,loppuaika,datevalue(alkuaika 1) as uusialkuaika,
iif(dateadd('d',2,alkuaika)0 and format(alkuaika 1,'ddd') not in ('la','su')
UNION
SELECT nimi,alkuaika,loppuaika,datevalue(alkuaika 2) as uusialkuaika,
iif(dateadd('d',3,alkuaika)0 and format(alkuaika 2,'ddd') not in ('la','su')
UNION
SELECT nimi,alkuaika,loppuaika,datevalue(alkuaika 3) as uusialkuaika,
iif(dateadd('d',4,alkuaika)0 and format(alkuaika 3,'ddd') not in ('la','su')
UNION
SELECT nimi,alkuaika,loppuaika,alkuaika 4 as uusialkuaika,
iif(dateadd('d',5,alkuaika)0 and format(alkuaika 4,'ddd') not in ('la','su')
UNION
SELECT nimi,alkuaika,loppuaika,alkuaika 5 as uusialkuaika,
iif(dateadd('d',6,alkuaika)0 and format(alkuaika 5,'ddd') not in ('la','su')
UNION SELECT nimi,alkuaika,loppuaika,alkuaika 6 as uusialkuaika,
iif(dateadd('d',7,alkuaika)0 and format(alkuaika 6,'ddd') not in ('la','su');
Tämän toiminta edellyttää, että alku- ja loppuajan välillä on max 7 vuorokautta. Jos aikajaksot on pitkiä, ei ole (ehkä) mitään järkeä tehdä näin. Tuon voi sitten vielä summata uudessa kyselyssä, jolloin saa yhden tietueen per tapahtuma, esim:
SELECT kysely4.nimi, kysely4.alkuaika, kysely4.loppuaika, sum(kysely4.hyv_aika) AS arkipaiva_aika
FROM kysely4
GROUP BY kysely4.nimi, kysely4.alkuaika, kysely4.loppuaika;
Tulos on näissä kyselyissä päivinä, kun päivämääriä vähennetään toisistaan.
Kysely4 on tässä tapauksessa tuo eka union kysely.
Myös switch- funktiolla voisi olla käyttöä tilantessasi.
Datan luonne (lähinnä alku- ja loppuajan välisen jakson maksimipituus) ratkaisee sen, onko järkevää lähteä tekemään kyselyä, joka hanskaisi homman.- otso
kiitos vaan vastauksesta mutta tässä tapauksessa on niin, että aikajakson pituus saattaa tietyissä tilanteissa lähennellä monia kuukausia joten tuo mainitsemasi ehdotus voi olla hieman hankala
- Kunde
Sub Tunnit(Alku As Date, Loppu As Date)
Dim Tunnit As Double
Dim x As Date
x = Format(Alku, "dd/mm/yyyy")
Tunnit = DateDiff("h", Alku, Loppu)
While x 5 Then
laskuri = laskuri 1
x = x 1
Else
x = x 1
End If
Wend
Tunnit = Tunnit - laskuri * 24
MsgBox Tunnit
End Sub
Sub Koe()
Tunnit TxtAlku.Text,txtLoppu.Text
End Sub
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
Työeläkeloisinta Suomen suurin talousongelma
Työeläkeloisinta maksaa vuodessa lähes 40 miljardia euroa, josta reilut 28 miljardia on pois palkansaajien ostovoimasta.2812926Veroaste on Suomessa viitisen prosenttiyksikköä liian matala
Veropohjaa on rapautettu käytännössä koko kulunut vuosituhat, jonka vuoksi valtion menoja on jouduttu rahoittamaan velka522313Israel euroviisujen 2.
Israel sai taas eniten yleisöääniä. Suomesta täydet 12 pistettä, poliittinen ”ammattiraati” antoi 0 pistettä. Hyvä Is3481997- 1151733
Euroviisut ei enää niin musiikkikilpailu?
Kappaleiden taso ei enää ole mikä sijoituksen ratkaisee.Eikö kukaan ihmettele että Israel pärjää lähes joka vuosi kisois1081675Mun mielestäni on tosi loukkaavaa
Nainen, että luulet palatan typeriä, sekavia ja ilkeitä viestejä mun kirjoittamiksi. Mä en ole katkera, epätoivoinen, ra2121375- 661317
- 681253
- 581232
Rakas nainen ymmärsin
Että minun pitää pitää kiinni sinusta. Haluan, että sä olet onnellinen. Olet mulle se oikea ja mä sulle. Rakastan Sua yl771181